Heim > Backend-Entwicklung > Python-Tutorial > Warum erscheint mein Tkinter-Bild nicht in einer Klasse?

Warum erscheint mein Tkinter-Bild nicht in einer Klasse?

Susan Sarandon
Freigeben: 2024-12-27 21:43:13
Original
905 Leute haben es durchsucht

Why Doesn't My Tkinter Image Appear Inside a Class?

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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage