Maison >développement back-end >Tutoriel Python >Pourquoi les images Tkinter disparaissent-elles lorsqu'elles sont créées dans des méthodes de classe ?
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.
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 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!