web-dev-qa-db-fra.com

Comment effacer Tkinter Canvas?

Quand je dessine une forme en utilisant:

canvas.create_rectangle(10, 10, 50, 50, color="green")

Est-ce que Tkinter garde trace du fait qu'il a été créé?

Dans un jeu simple que je crée, mon code a un Frame créer un groupe de rectangles, puis dessinez un grand rectangle noir pour effacer l'écran, puis dessinez un autre ensemble de rectangles mis à jour, etc.

Est-ce que je crée des milliers d'objets rectangulaires en mémoire?

Je sais que vous pouvez affecter le code ci-dessus à une variable, mais si je ne le fais pas et que je dessine directement sur le canevas, reste-t-il en mémoire ou dessine-t-il simplement les pixels, comme dans le canevas HTML5?

39
Taylor Hill

Chaque élément de toile est un objet que Tkinter garde en mémoire. Si vous effacez l'écran en dessinant simplement un rectangle noir, vous avez effectivement créé une fuite de mémoire. Votre programme finira par planter en raison des millions d'éléments dessinés.

Pour effacer un canevas, utilisez la méthode delete . Donnez-lui le paramètre spécial "all" pour supprimer tous les éléments du canevas (la chaîne "all" "est une balise spéciale représentant tous les éléments du canevas):

canvas.delete("all")

Si vous souhaitez supprimer uniquement certains éléments du canevas (tels que les objets de premier plan tout en laissant les objets d'arrière-plan à l'écran), vous pouvez attribuer des balises à chaque élément. Ensuite, au lieu de "all", vous pouvez fournir le nom d’une balise.

Si vous créez un jeu, vous n'avez probablement pas besoin de supprimer et de recréer des éléments. Par exemple, si vous avez un objet qui se déplace sur l'écran, vous pouvez utiliser la méthode déplacer ou coords pour déplacer l'élément.

66
Bryan Oakley

Les éléments dessinés sur la toile sont persistants. create_rectangle renvoie un identifiant d'élément que vous devez suivre. Si vous ne supprimez pas les anciens éléments, votre programme finira par ralentir.

De Fredrik Lundh's ne introduction à Tkinter :

Notez que les éléments ajoutés au canevas sont conservés jusqu'à ce que vous les supprimiez. Si vous souhaitez modifier le dessin, vous pouvez utiliser des méthodes telles que coords, itemconfig et move pour modifier les éléments, ou bien utiliser delete pour les supprimer. leur.

6
Steven Rumbalski

Oui, je crois que vous créez des milliers d'objets. Si vous cherchez un moyen facile d'en supprimer plusieurs à la fois, utilisez les balises canvas décrites ici . Cela vous permet d'effectuer la même opération (telle que la suppression) sur un grand nombre d'objets.

2
DaveTheScientist