Domanda

Mi piacerebbe essere in grado di scambiare l'immagine su un'etichetta Tkinter, ma non sono sicuro di come farlo, tranne che per la sostituzione del widget stesso.

Al momento, posso visualizzare un'immagine in questo modo:

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

Tuttavia, quando l'utente preme, dicono che la chiave ENTER, mi piacerebbe cambiare l'immagine.

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

È possibile?

È stato utile?

Soluzione

Il metodo label.configure funziona in panel.configure(image=img).

Quello che ho dimenticato di fare era includere la panel.image=img, per evitare che la raccolta dei rifiuti da eliminare l'immagine.

Di seguito è la nuova versione:

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

Il codice originale funziona perché l'immagine viene memorizzata nella img variabile globale.

Altri suggerimenti

Un'altra opzione per farlo.

Uso programmazione orientata agli oggetti e con un'interfaccia interattiva per aggiornare l'immagine.

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

Sostituire 'cualitativa.jpg' per l'immagine predefinita che si desidera utilizzare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top