Подтвердить что ты не робот

Как обновить изображение виджета 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()

Возможно ли это?

4b9b3361

Ответ 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.