Tkinter-Bild im Unterricht nicht verfügbar
In Tkinter kann das Erstellen von Bildern innerhalb einer Funktion zu unerwartetem Verhalten führen. Während der folgende Code außerhalb einer Klasse erfolgreich ein Bild anzeigt:
import tkinter root = tkinter.Tk() canvas = tkinter.Canvas(root) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root.mainloop()
Derselbe Code, der innerhalb einer Klasse platziert wird, rendert das Bild nicht:
import tkinter class Test: def __init__(self, master): canvas = tkinter.Canvas(master) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root = tkinter.Tk() test = Test(root) root.mainloop()
Lösung: Umfang von Bildreferenz
Das Problem entsteht, weil die Fotovariable eine lokale Variable innerhalb des Klassenkonstruktors ist. Sobald der Konstruktor fertig ist, wird die Variable vom Garbage Collector verworfen. Damit das Bild sichtbar bleibt, muss die Referenz auf die Fotovariable innerhalb der Klasse gespeichert werden. Dies kann erreicht werden, indem der Code folgendermaßen geändert wird:
class Test: def __init__(self, master): self.canvas = tkinter.Canvas(master) self.canvas.grid(row=0, column=0) self.photo = tkinter.PhotoImage(file='./test.gif') self.canvas.create_image(0, 0, image=self.photo) root = tkinter.Tk() test = Test(root) root.mainloop()
Durch die Zuweisung der photo-Variablen zu self.photo bleibt ein Verweis auf das Bild auch nach Abschluss des Konstruktors erhalten. Dadurch kann das Bild innerhalb der Klasse angezeigt werden.
Suche nach Tkinter-Bildproblemen
Wenn Sie auf ähnliche Probleme stoßen, bei denen Tkinter-Bilder nicht angezeigt werden, denken Sie daran, nach relevant zu suchen Dokumentationen oder Forenthreads können wertvolle Einblicke in die Ursache und Lösung liefern. Wenn Sie den Umfang von Variablen verstehen und wissen, wie Sie Referenzen verwalten, können Sie Bilder in Tkinter-Anwendungen effektiv anzeigen.
Das obige ist der detaillierte Inhalt vonWarum erscheint mein Tkinter-Bild nicht in einer Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!