57

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()

これは可能ですか?

4

3 に答える 3

99

このメソッド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

于 2010-08-14T05:28:58.820 に答える