如何更新Tkinter标签窗口小部件的图像?
问题内容:
我希望能够交换Tkinter标签上的图像,但是除了替换小部件本身之外,我不确定如何执行此操作。
目前,我可以显示如下图像:
import Tkinter as tk
import ImageTk
root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
root.mainloop()
但是,当用户ENTER
按下按键时,我想更改图像。
import Tkinter as tk
import ImageTk
root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
def callback(e):
# change image
root.bind("<Return>", callback)
root.mainloop()
这可能吗?
问题答案:
该方法label.configure
确实适用于panel.configure(image=img)
。
我忘记做的是包括panel.image=img
,以防止垃圾回收删除图像。
以下是新版本:
import Tkinter as tk
import ImageTk
root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image=img)
panel.pack(side="bottom", fill="both", expand="yes")
def callback(e):
img2 = ImageTk.PhotoImage(Image.open(path2))
panel.configure(image=img2)
panel.image = img2
root.bind("<Return>", callback)
root.mainloop()
原始代码有效,因为图像存储在全局变量中img
。