2017-11-03 40 views
1

ein wenig neu bei Tkinter und PIL, bei dem Versuch, eine GUI einzurichten, die das angezeigte Bild basierend auf der Auswahl im OptionMenu umschaltet. Der Pfad wird aktualisiert, das Bild jedoch nicht. Irgendwelche Heilmittel?Tkinter und PIL: Angezeigtes Bild über OptionMenu ändern

from tkinter import * 
from PIL import Image, ImageTk 
import os 

def changeimage(): 
    path.set(cwd + '/img/' + imageVar.get() + '.png') 
    img = ImageTk.PhotoImage(Image.open(path.get())) 
    panel.configure(image = img) 

window = Tk() 
window.configure(background='grey') 

imageVar = StringVar(window) 
images = {'image1', 'image2', 'image3'} 
imageVar.set('image1') 

cwd = os.getcwd() 

imageSelectMenu = OptionMenu(window, imageVar, *images) 
imageSelectMenu.pack() 

path = StringVar(window) 
path.set(cwd + '/img/' + imageVar.get() + '.png') 
img = ImageTk.PhotoImage(Image.open(path.get())) 

panel = Label(window, image = img) 
panel.pack() 

imageVar.trace('w', changeimage) 
window.mainloop() 
+0

Sie haben absolut keine Rückrufe zu setzen 'img' nach anfänglich zum ersten Mal ausgeführt wird – Aaron

+0

einen Rückruf hinzugefügt, Bildänderungen auf leere Leinwand statt Bild Ich beabsichtige – Enigma

Antwort

0

Dies ist ein sehr häufiger Fehler. In tkinter müssen Sie einen Verweis auf das Bildobjekt behalten oder es wird Müll gesammelt.

def changeimage(): 
    path.set(cwd + '/img/' + imageVar.get() + '.png') 
    img = ImageTk.PhotoImage(Image.open(path.get())) 
    panel.configure(image = img) 
    panel.img = img # keep a reference 
+0

Awesome, dass es behoben, ich danke Ihnen sehr. – Enigma

Verwandte Themen