首页 > 解决方案 > Tkinter Python 销毁标签

问题描述

我有一个程序,可以在单击按钮时替换 Tkinter GUI 上的图像。我在按钮上附加了一个功能,原始标签被破坏并替换为新标签。然后我使用新标签打包新图像。但是,图像未显示。看来我也必须调用mainloop()新函数。即使这样也解决不了。

def update():
    global imglabel
    imglabel.destroy()
    Img = ImageTk.PhotoImage(Image.open("img7.bmp"))
    imglabel = Label(image=Img)
    imglabel.pack()


root = Tk()
button1 = Button(root, text="Update", command=update)
button1.pack()

Img = ImageTk.PhotoImage(Image.open("img27.bmp"))
imglabel = Label(image=Img)
imglabel.pack()

root.mainloop()

标签: pythontkinter

解决方案


def update():
    global imglabel
    imglabel.destroy()
    Img = ImageTk.PhotoImage(Image.open("img7.bmp"))
    imglabel = Label(image=Img)
    imglabel.image = Img # ADDED THIS LINE
    imglabel.pack()


root = Tk()
button1 = Button(root, text="Update", command=update)
button1.pack()

Img = ImageTk.PhotoImage(Image.open("img27.bmp"))
imglabel = Label(image=Img)
imglabel.pack()

root.mainloop()

通过imglabel.image = Img修复它添加图像。我最好的猜测是图像在 中声明后被垃圾收集update(),因此在此方法结束时被丢弃:虽然当它被显式归因于imglabel.image时,解释器知道它应该保留它,因为它现在是全局属性多变的。Label当它与via关联时,它不将其保存在内存中仍然会很奇怪Label(image=Img),所以我真的不确定我是否正确。

您还可以避免破坏标签并使用以下代码重新创建它:

def update():
    global imglabel
    Img = ImageTk.PhotoImage(Image.open("image7.bmp"))
    imglabel.configure(image=Img)
    imglabel.image = Img

推荐阅读