我正在尝试学习一些tkinter。我无法让tkinter显示图标。我不知道哪里出错了。它不会产生任何错误,它会尊重图像的大小,但它是不可见的。我在网上找到的所有内容都告诉你添加第二个引用以防止python中的垃圾收集,但不知何故,这不是诀窍。 以下是我的代码出错的部分:
from Tkinter import *
from PIL import Image, ImageTk
class GUI:
def __init__(self, master):
frame = Frame(master)
frame.pack()
#status bar
self.bar = Frame(root, relief=RIDGE, borderwidth=5)
self.bar.pack(side=TOP)
self.iconPath = 'data/icons/size.png'
self.icon = ImageTk.PhotoImage(Image.open(self.iconPath))
self.icon_size = Label(self.bar, image = self.icon)
self.icon_size.pack(side=LEFT)
root = Tk()
app = GUI(root)
root.mainloop()
答案 0 :(得分:18)
将PhotoImage或其他Image对象添加到Tkinter小部件时,必须保留对图像对象的引用。如果不这样做,图像将不会一直显示。
决定here
答案 1 :(得分:7)
出于某种原因(我不明白为什么),您必须将图像对象锚定到窗口小部件中才能显示。因此,请在代码中尝试以下更改:
from Tkinter import *
from PIL import Image, ImageTk
class GUI:
def __init__(self, master):
frame = Frame(master)
frame.pack()
#status bar
self.bar = Frame(root, relief=RIDGE, borderwidth=5)
self.bar.pack(side=TOP)
self.iconPath = 'data/icons/size.png'
self.icon = ImageTk.PhotoImage(Image.open(self.iconPath))
self.icon_size = Label(self.bar)
self.icon_size.image = self.icon # <== this is were we anchor the img object
self.icon_size.configure(image=self.icon)
self.icon_size.pack(side=LEFT)
root = Tk()
app = GUI(root)
root.mainloop()
祝你好运!
答案 2 :(得分:1)
对于所有未来的读者,就我而言,问题在于透明度。从图像中删除alpha通道修复了它。