J'aimerais pouvoir échanger une image sur une étiquette Tkinter, mais je ne sais pas comment le faire, sauf pour remplacer le widget lui-même.
Actuellement, je peux afficher une image comme ceci:
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()
Toutefois, lorsque l'utilisateur clique sur la touche ENTER
, je souhaite modifier l'image.
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()
Est-ce possible?
La méthode label.configure
fonctionne dans panel.configure(image=img)
.
Ce que j'ai oublié de faire, c'est d'inclure le panel.image=img
pour empêcher la récupération de place de supprimer l'image.
Voici la nouvelle 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()
Le code d'origine fonctionne car l'image est stockée dans la variable globale img
.
Une autre option pour le faire.
Utilisation de la programmation orientée objet et d’une interface interactive pour mettre à jour l’image.
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()
Remplacez 'cualitativa.jpg' pour l'image par défaut que vous souhaitez utiliser.