Как обновить изображение виджета Tkinter Label?
Я хотел бы иметь возможность обменивать изображение на метке 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()
Возможно ли это?
Ответы
Ответ 1
Метод 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
.