Comment effacer Tkinter Toile?
Lorsque je dessine une forme à l'aide d':
canvas.create_rectangle(10, 10, 50, 50, color="green")
Ne Tkinter garder une trace du fait qu'il a été créé?
Dans un simple jeu que je suis en train de faire, mon code a un Frame
créer un tas de rectangles, puis dessinez un grand rectangle noir pour effacer l'écran, puis dessinez un autre ensemble de mise à jour des rectangles, et ainsi de suite.
Suis-je de la création de milliers d'objets rectangle en mémoire?
Je sais que vous pouvez assigner le code ci-dessus à une variable, mais si je ne le faisons pas et il suffit de dessiner directement sur la toile, fait-il pour rester dans la mémoire, ou est-il juste de dessiner les pixels, comme dans le HTML5 canvas?
Vous devez vous connecter pour publier un commentaire.
Chaque toile élément est un objet qui Tkinter conserve. Si vous êtes centre de l'écran, simplement en dessinant un rectangle noir, alors vous avez effectivement créé une fuite de mémoire -- éventuellement de votre programme plantera en raison des millions d'articles qui ont été tirées.
Pour effacer une toile, utilisez le supprimer méthode. Donnez-lui le paramètre spécial
"all"
pour supprimer tous les éléments sur la toile (la chaîne"all"
" est un tag spécial qui représente tous les éléments sur la toile):Si vous souhaitez supprimer uniquement certains éléments sur la toile (comme les objets du premier plan, tout en laissant les objets d'arrière-plan sur l'écran), vous pouvez attribuer des mots clés à chaque élément. Alors, au lieu de
"all"
, vous pouvez fournir le nom d'une balise.Si vous êtes à la création d'un jeu, vous n'avez probablement pas besoin de supprimer et de recréer les éléments. Par exemple, si vous avez un objet qui se déplace à travers l'écran, vous pouvez utiliser le déplacer ou coords méthode pour déplacer l'élément.
Éléments tirés de la toile sont persistantes.
create_rectangle
retourne un id de l'élément que vous avez besoin de garder une trace de. Si vous ne retirez pas les anciens éléments de votre programme finira par ralentir.De Fredrik Lundh de Une Introduction à Tkinter:
tags='my_tag'
. Ensuite, lorsque vous souhaitez effacer l'écran, vous pouvez fairecanvas.delete('my_tag')
. Toutes en toile widgets taggés avec'my_tag'
sera supprimé.Oui, je crois que vous êtes la création de milliers d'objets. Si vous êtes à la recherche d'un moyen facile de supprimer un groupe d'entre eux à la fois, utiliser de la toile tags décrit ici. Cela vous permet d'effectuer la même opération (par exemple, suppression) sur un grand nombre d'objets.