Heim >Backend-Entwicklung >Python-Tutorial >Warum verschwinden Tkinter-Bilder, wenn sie innerhalb von Klassenmethoden erstellt werden?

Warum verschwinden Tkinter-Bilder, wenn sie innerhalb von Klassenmethoden erstellt werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 06:27:20972Durchsuche

Why Do Tkinter Images Disappear When Created Within Class Methods?

Verstehen von Problemen mit der Sichtbarkeit von Tkinter-Bildern

Tkinter, eine beliebte GUI-Bibliothek für Python, stößt gelegentlich auf Probleme mit der Anzeige von Bildern, wenn sie innerhalb von Funktionen erstellt werden. Dieses Verhalten ist darauf zurückzuführen, wie Tkinter mit lokalen Variablen wie Bildreferenzen umgeht.

Die Herausforderung

Berücksichtigen Sie den folgenden Code, der ein Bild erfolgreich 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()

Allerdings beim Erstellen Das Bild innerhalb einer Klassenmethode verschwindet.

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()

Die Lösung

Die Das Problem entsteht, weil die lokale Variable photo einen Verweis auf das Bild darstellt. In der Klassenmethode geht dieser Verweis verloren, da das Foto nach der Ausführung der Methode den Gültigkeitsbereich verlässt.

Um dieses Problem zu beheben, speichern Sie einen dauerhaften Verweis auf das Foto innerhalb der Klasseninstanz:

import tkinter

class Test:
    def __init__(self, master):
        canvas = tkinter.Canvas(master)
        canvas.grid(row = 0, column = 0)
        self.photo = tkinter.PhotoImage(file = './test.gif')
        canvas.create_image(0, 0, image=self.photo)

root = tkinter.Tk()
test = Test(root)
root.mainloop()

Durch die Speicherung der Referenz in self.photo bleibt sie für die gesamte Lebensdauer der Klasseninstanz bestehen und stellt so sicher, dass das Bild sichtbar bleibt.

Das obige ist der detaillierte Inhalt vonWarum verschwinden Tkinter-Bilder, wenn sie innerhalb von Klassenmethoden erstellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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