Tkinter标签不显示图像

Whi*_*old 8 python tkinter

我正在努力学习一些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()
Run Code Online (Sandbox Code Playgroud)

小智 20

将PhotoImage或其他Image对象添加到Tkinter小部件时,必须保留对图像对象的引用.如果不这样做,图像将不会始终显示.

这里的决定

  • OP已经有了永久性参考(`self.icon`). (4认同)

Die*_*lez 8

出于某种原因(我不明白为什么),您必须将图像对象锚定到窗口小部件中才能显示它.因此,请在您的代码中尝试以下更改:

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()
Run Code Online (Sandbox Code Playgroud)

祝好运!

  • "为什么"是因为python垃圾收集会破坏图像,除非有永久引用它. (3认同)

Mir*_*ac7 6

对于所有未来的读者来说,就我而言,问题在于透明度。从图像中删除 alpha 通道修复了它。