Ich versuche, in einer GUI ein Bild mithilfe des tkinter.PhotoImage anzuzeigen (funktioniert auch), und dieses Bild im Fenster anschließend zu updaten auf ein anderes Bild, das man mithilfe eines Filedialogs auswählen soll. Ja, ich habe brav GIFs verwendet, und jedes Bild das ich getestet habe funktioniert auch wenn man es einzeln in einem Fenster oder dem Label eines Fensters erzeugt. Nur wenn man es updaten soll, wird es nicht mehr angezeigt.
Der lauffertige Code steht unten, die Probleme sind kommentiert.
Code: Alles auswählen
import tkinter as tk
import tkinter.filedialog as filedialog
master=tk.Tk()
img_var=tk.StringVar()
img_var.set('test.gif')
img_label=tk.Label(master) #Label auf dem das Bild angezeigt wird
img_label.grid()
image1=tk.PhotoImage(file=img_var.get())
img_label['image']=image1 #erzeugt das Bild im Label
def browse_image(): #öffnet einen Bildauswahldialog
browse=filedialog.askopenfilename()
if browse=="":return None #Klick auf "Abbrechen"
img_var.set(browse)
#bis hierhin funktioniert alles, auch wenn das Bild im Fenster dann nicht auf das neue Bild upated; logisch, schließlich wird das PhotoImage nicht geupdated
#wenn wir jetzt also das PhotoImage manuell updaten, dann müsste doch eigentlich im Label im master anschließend das neue Bild zu sehen sein, oder?
image1=tk.PhotoImage(file=img_var.get())
#es ändert sich immer noch nichts, also sagen wir dem Label nochmal, dass es ein neues Bild bekommen hat
img_label["image"]=image1
#und ab hier updated zwar das Fenster, aber das Bild wird nicht mehr angezeigt :/
#auffällig ist übrigens dass das Label trotzdem die Abmessungen des neuen Bildes annimmt... wenn man aufs alte bild zurückschaltet ändert es auch die Größe
#wieder zurück, aber auch das alte Bild wird dann nicht mehr angezeigt.
choose_img=tk.Button(master,text="Browse Image...",command=browse_image)
choose_img.grid()
Danke und schönen Tag noch