я работаю над получением изображений на кнопках вместо текста для целей пользовательского интерфейса, у меня нет опыта работы с изображениями на пользовательском интерфейсе, поэтому я ищу некоторые рекомендации, когда я передаю изображение, я получаю ошибку:
AttributeError: у объекта 'Open_Template' нет атрибута 'ImageTk'
Может быть, кто-то может объяснить, что мне не хватает, чтобы передать ImageTk в класс?
from tkinter import *
from tkinter import messagebox
from PIL import ImageTk, Image
import datetime
import tkinter as tk
import webbrowser
import pytz
import openpyxl
class Main_App(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
container = tk.Frame(self)
container.pack(side="top",fill="both",expand=True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)
self.frames= {}
for F in (test1,test2):
frame = F(container, self)
self.frames[F]=frame
frame.grid (row=0, column = 0, sticky="nsew")
self.show_frame(test1)
def show_frame(self,cont):
frame = self.frames[cont]
frame.tkraise()
def SetMenu(self,parent,controller):
Button1= tk.Button(self,relief='flat',command=lambda:controller.show_frame(test1))
Button1.grid(column=0,row=0,sticky="nsew")
Button1.config(image=self.ImageTk.PhotoImage(file ="image.gif"))
class test1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
SetMenu(self,parent, controller)
class test2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
SetMenu(self,parent, controller)
app=Main_App()
app.mainloop()
так, нашел способ сделать это работает. это
Button1=Button(self,bg="white",relief='flat',command=lambda:controller.show_frame(test1))
Button1.grid(column=0,row=0,sticky="nsew")
self.ph_im4 = ImageTk.PhotoImage(file = "image.gif")
Button1.config(image=self.ph_im4)
, но этот вид превосходит цель того, что я пытаюсь сделать, поэтому мне нужно было бы иметь возможность загрузить изображение без переменной, или мне нужно было бы создать около 500 переменных для загрузить и отобразить каждое изображение вручную