Comment effacer la toile Tkinter?

Quand je dessine une forme en utilisant:

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

Tkinter garde-t-il une trace du fait qu'il a été créé?

Dans un jeu simple que je fais, mon code a un Frame Créer un tas de rectangles, puis dessiner un grand rectangle noir pour effacer l'écran, puis dessiner un autre ensemble de rectangles mis à jour, et ainsi de suite.

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

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

34
demandé sur Laurel 2013-04-05 21:02:07

3 réponses

Chaque élément de canevas est un objet dont Tkinter garde la trace. Si vous effacez l'écran en dessinant simplement un rectangle noir, alors vous avez effectivement créé une fuite de mémoire - finalement votre programme va planter en raison des millions d'éléments qui ont été dessinés.

Pour effacer un canevas, utilisez la méthodedelete . 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 qui représente tous les éléments du canevas. la toile):

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. Alors, 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 un objet se déplace sur l'écran, vous pouvez utiliser la méthode move ou coords pour déplacer l'élément.

55
répondu Bryan Oakley 2013-04-05 17:46:31

Les éléments dessinés sur le canevas sont persistants. create_rectangle renvoie un id d'élément dont vous devez garder une trace. Si vous ne supprimez pas les anciens éléments, votre programme finira par ralentir.

De Fredrik Lundh Une Introduction à Tkinter :

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

5
répondu Steven Rumbalski 2013-04-05 17:32:50

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

1
répondu DaveTheScientist 2013-04-05 17:33:27