当我使用以下工具绘制形状时:

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

Tkinter是否记录了它被创建的事实?

在我正在制作的一个简单游戏中,我的代码有一个Frame创建一组矩形,然后绘制一个大的黑色矩形以清除屏幕,然后绘制另一组更新的矩形,依此类推.

我在内存中创建了数千个矩形对象吗?

我知道你可以把上面的代码分配给一个变量,但如果我不这样做,直接画到画布上,它会留在内存中,还是像HTML5画布那样画像素?

推荐答案

每个画布项目都是Tkinter跟踪的对象.如果你只是通过绘制一个黑色矩形来清除屏幕,那么你实际上已经造成了内存泄漏——最终你的程序将因绘制的数百万项而崩溃.

要清除画布,请使用delete方法.为其指定特殊参数"all"以删除画布上的所有项目(字符串"all""是表示画布上所有项目的特殊标记):

canvas.delete("all")

如果只想删除画布上的某些项目(例如前景对象,而将背景对象保留在屏幕上),可以 for each 项目指定标记.然后,您可以提供标签的名称,而不是"all".

如果你正在创建一个游戏,你可能不需要删除和重新创建项目.例如,如果有一个对象在屏幕上移动,可以使用movecoords方法移动该项目.

Python-3.x相关问答推荐

如果行在所有上级索引中都为0,如何删除下级索引行?

从.csv导入将文件夹路径加入到文件名

无法导入名称';核心';来自部分初始化的模块';tensorflow_datasets';(很可能是由于循环导入)

如何将多输入数据加载器传递给单输入模型

pytorch 中 mps 设备的 manual_seed

在 python pandas 中设置条件和分配新值

Einsum 对于张量乘法很慢

为什么 Multiprocessing 的 Lock 不会阻止其他进程使用对象?

魔术8球txt文件列表

从 h264 帧解析数据包时 PyAV 不一致

请求:RecursionError:超出最大递归深度

使用带有多线程的 win32com

如何使我的课程在 Python 中非常可打印?

Python 解包运算符 (*)

所有 Python dunder 方法的列表 - 您需要实现哪些方法才能正确代理对象?

无法在 Windows 8 中使用 Python 3.3 找到 vcvarsall.bat

如何模拟 open(...).write() 而不会出现没有这样的文件或目录错误?

混合全局/参数和名为top的函数的奇怪python行为

什么是ANSI_X3.4-1968编码?

在 Meta 中创建具有动态模型的通用序列化程序