如何完全删除一个图

2024-04-19 22:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个小游戏,用turtle来制作图形。这是一个模拟三角钉游戏从饼干桶,能够告诉玩家在游戏中的任何一点下一个最好的举动,以及其他功能。peg只是turtle.RawPen的一个子类的实例,我保留了大量RawPen的简单实例来绘制表示移动的箭头。

我注意到当我重新启动游戏(它调用turtle.bye())来杀死海龟窗口时,内存消耗实际上会增加,因为海龟似乎不会被删除。即使我预先调用window.clear(),这将清除_turtles中的window.__dict__,仍然有对海龟的引用。我确保在重新启动期间删除对它们的所有引用,所以这不是问题所在。有没有什么方法可以真正删除海龟,这样它就可以被垃圾收集了?


Tags: 实例功能图形游戏玩家绘制箭头window
3条回答

删除对画布中对象的所有引用(当然包括TurtleWindow),然后用canvas.destroy()销毁画布就成功了。也许还有其他的解决办法,但这是我能想到的最好的办法。我很感谢大家的帮助,因为它将在未来很好地为我服务,至少对于不是使用turtleAPI创建的对象。

您是否尝试删除内存消耗对象,然后使用Python的内置garbage collector接口显式地收集垃圾?

import gc
...
# Delete memory-consuming object
del window._turtles
# Collect the garbage
gc.collect()

去除海龟体内的数据通常要做的是reset()

carl=Turtle()
.... code
carl.reset()

在海龟名单上,金、唐纳德、范妮和弗兰克都是海龟:

group=[kim,donald,fanny,frank]
for turtle in group:
    turtle.reset()

在一个特定的屏幕上还有一个方便的allturtles的代码,这是一个内置的列表,名为(screen.turtles)。所以如果你有一个屏幕叫做screen:

screen=Screen()
...
code
....

for turtle in screen.turtles():
    turtle.reset()

相关问题 更多 >