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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top