python - 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()
解决方案
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
推荐阅读
- node.js - Heroku + MERN 堆栈 - 任何值的 HTTP POST 请求无效
- c# - 在 C# 的 WinPE10 中接收 WM_QueryEndSession 或 WM_WTSSESSIONCHANGE
- javascript - dataTables - 如何使所有列在“draw.dt”上可排序
- javascript - 排队回调函数然后等待它们的执行
- python - 在 scipy.spatial.Delaunay python 中找到一个点的所有单纯形
- jekyll - 如何在带有 Liquid 模板语言的 if 语句中使用 for 循环?
- r - R/Shiny 直方图类作为反应性
- javascript - Ajax 未在 laravel 控制器中发布
- python - Pandas:返回值的第一个实例和最后一个实例的索引值
- android-studio - adb 可以识别但 Chrome 开发工具无法识别的 Android 设备