Wie das Bild eines Tkinter Label-Widget aktualisieren?
-
28-09-2019 - |
Frage
Ich möchte in der Lage auf einem Tkinter Etikett aus einem Bild zu tauschen sein, aber ich bin nicht sicher, wie es zu tun, außer dass das Widget selbst.
Zur Zeit kann ich ein Bild anzeigen, etwa so:
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()
Wenn jedoch die Benutzer-Hits, die ENTER
Schlüssel sagen, ich möchte das Bild ändern.
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()
Ist das möglich?
Lösung
Das Verfahren label.configure
funktioniert in panel.configure(image=img)
.
Was ich vergessen hat zu tun, um die panel.image=img
umfassen, Müllabfuhr zu verhindern, dass das Bild zu löschen.
Im Folgenden ist die neue Version:
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()
Der ursprüngliche Code funktioniert, weil das Bild in der globalen Variablen img
gespeichert wird.
Andere Tipps
Eine andere Möglichkeit, es zu tun.
Mit dem objektorientierten Programmierung und mit einer interaktiven Schnittstelle um das Bild zu aktualisieren.
from Tkinter import *
import tkFileDialog
from tkFileDialog import askdirectory
from PIL import Image
class GUI(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
w,h = 650, 650
master.minsize(width=w, height=h)
master.maxsize(width=w, height=h)
self.pack()
self.file = Button(self, text='Browse', command=self.choose)
self.choose = Label(self, text="Choose file").pack()
self.image = PhotoImage(file='cualitativa.gif')
self.label = Label(image=self.image)
self.file.pack()
self.label.pack()
def choose(self):
ifile = tkFileDialog.askopenfile(parent=self,mode='rb',title='Choose a file')
path = ifile.name
self.image2 = PhotoImage(file=path)
self.label.configure(image=self.image2)
self.label.image=self.image2
root = Tk()
app = GUI(master=root)
app.mainloop()
root.destroy()
Ersetzen ‚cualitativa.jpg‘ für die Standard-Bild, das Sie verwenden möchten.