Maison >développement back-end >Tutoriel Python >Pourquoi les images Tkinter disparaissent-elles lorsqu'elles sont créées dans des méthodes de classe ?

Pourquoi les images Tkinter disparaissent-elles lorsqu'elles sont créées dans des méthodes de classe ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 06:27:201021parcourir

Why Do Tkinter Images Disappear When Created Within Class Methods?

Comprendre les problèmes de visibilité des images de Tkinter

Tkinter, une bibliothèque GUI populaire pour Python, rencontre parfois des problèmes d'affichage des images lorsqu'elles sont créées dans des fonctions. Ce comportement découle de la façon dont Tkinter gère les variables locales telles que les références d'image.

Le défi

Considérez le code suivant qui affiche avec succès une image :

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

Cependant, lors de la création l'image au sein d'une méthode de classe, l'image disparaît.

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

La solution

La le problème se pose car la variable locale photo représente une référence à l'image. Dans la méthode de classe, cette référence est perdue car la photo devient hors de portée après l'exécution de la méthode.

Pour résoudre ce problème, enregistrez une référence persistante à la photo dans l'instance de classe :

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

En stockant la référence dans self.photo, elle persiste pendant toute la durée de vie de l'instance de classe, garantissant que l'image reste visible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn