Maison >développement back-end >Tutoriel Python >Pourquoi mes images Tkinter ne s'affichent-elles pas à l'intérieur des classes ?
Dans Tkinter, une bibliothèque GUI populaire pour Python, il arrive souvent que les images n'apparaissent pas lors de leur création dans des fonctions ou des méthodes de classe. Examinons la raison de ce comportement particulier.
Lorsque vous utilisez Tkinter en dehors d'une classe, il est simple de créer et d'afficher des images. Comme démontré dans le premier extrait de code, déclarez simplement l'image à l'aide de tkinter.PhotoImage et affectez-la au canevas. Cependant, lorsque le code est encapsulé dans une classe (comme indiqué dans le deuxième extrait), l'image cesse de s'afficher.
La clé du problème réside dans la compréhension de la durée de vie des variables de Python. Les variables locales, telles que la variable photo dans l'exemple fourni, n'existent que dans le cadre de la fonction ou de la méthode dans laquelle elles sont définies. Dans le cas de la classe, la variable photo est détruite après la création de l'instance de classe, ce qui rend Tkinter incapable pour y accéder plus.
Pour remédier à cette situation, il est nécessaire de stocker une référence à l'image en dehors du cadre de la fonction ou de la méthode. Ceci peut être réalisé en attribuant la variable photo à l'instance de classe elle-même. Comme démontré dans la solution fournie :
self.photo = tkinter.PhotoImage(...)
Ce faisant, photo devient une variable d'instance et sa durée de vie est prolongée pour la durée d'existence de l'instance de classe. Cela permet à Tkinter d'accéder à l'image et de l'afficher comme prévu.
Si vous rencontrez des problèmes similaires avec des images qui n'apparaissent pas dans Tkinter, n'oubliez pas de vérifier la portée de vos variables d'image et de vous assurer qu'elles persistent au-delà de la fonction ou de la méthode dans lequel ils sont créés.
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!