Question

Je voudrais pouvoir échanger sur une image sur une étiquette Tkinter, mais je ne suis pas sûr de savoir comment le faire, sauf pour remplacer le widget lui-même.

À l'heure actuelle, 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, disent la touche ENTER, je voudrais changer 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?

Était-ce utile?

La solution

La méthode label.configure fonctionne en panel.configure(image=img).

Qu'est-ce que j'ai oublié de faire était inclure le panel.image=img, pour empêcher la collecte des ordures de supprimer l'image.

Ce qui suit est 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 parce que l'image est stockée dans la img variable globale.

Autres conseils

Une autre option pour le faire.

En utilisant la programmation orientée objet et avec 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()

Remplacer « cualitativa.jpg » pour l'image par défaut que vous souhaitez utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top