'class' 对象没有属性 'ImageTk'
'class' object has no attribute 'ImageTk'
我正在为 UI 目的在按钮上获取图像而不是文本,我没有在 UI 上处理图像的经验,所以我正在寻找一些指导,当我传递图像时得到错误:
AttributeError: 'Open_Template' 对象没有属性 'ImageTk'
也许有人可以解释我将 ImageTk 传递到 class 时缺少什么?
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 个变量来手动加载和映射每个图像
为什么要将自己添加到 ImageTk?
Button1.config(image=ImageTk.PhotoImage(file ="image.gif"))
如果你需要阻止垃圾收集器:
def SetMenu(self,parent,controller):
self.button1_image=ImageTk.PhotoImage(file ="image.gif")
Button1= tk.Button(self,relief='flat',command=lambda:controller.show_frame(test1))
Button1.grid(column=0,row=0,sticky="nsew")
Button1.config(image=self.button1_image)
Button1.image=self.button1_image
我正在为 UI 目的在按钮上获取图像而不是文本,我没有在 UI 上处理图像的经验,所以我正在寻找一些指导,当我传递图像时得到错误:
AttributeError: 'Open_Template' 对象没有属性 'ImageTk'
也许有人可以解释我将 ImageTk 传递到 class 时缺少什么?
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 个变量来手动加载和映射每个图像
为什么要将自己添加到 ImageTk?
Button1.config(image=ImageTk.PhotoImage(file ="image.gif"))
如果你需要阻止垃圾收集器:
def SetMenu(self,parent,controller):
self.button1_image=ImageTk.PhotoImage(file ="image.gif")
Button1= tk.Button(self,relief='flat',command=lambda:controller.show_frame(test1))
Button1.grid(column=0,row=0,sticky="nsew")
Button1.config(image=self.button1_image)
Button1.image=self.button1_image