【问题标题】:What is better?: To delete all elements of tkinter canvas and redraw them, or to update elements using move?什么更好?:删除 tkinter 画布的所有元素并重新绘制它们,或者使用移动更新元素?
【发布时间】:2020-08-05 11:19:27
【问题描述】:

我正在模拟生活在 2d 世界中的对象(圆)(对象移动并且可以相互交互,它们会发生碰撞)。 要查看模拟,我正在使用 tkinter 模块。 定义模拟的每个状态的所有变量都是使用我在 tkinter 实现之外的递归函数计算的(这样我就可以运行模拟而不必浪费时间绘图)。 我的问题是:您认为将模拟状态绘制到 tkinter 画布中会更好吗?:删除所有以前的状态元素并为每个新状态重新绘制所有新状态元素,或者找到一种能够更新使用 tkinter canvas 方法为每个新状态移动元素的位置。

【问题讨论】:

  • 我不是 100% 确定 tkinter/python 的情况,但一般来说,删除/创建对象是更多资源密集型操作,然后重新分配新坐标以重绘。
  • 好的,有道理,谢谢

标签: python canvas tkinter


【解决方案1】:

最好更新元素而不是创建新元素。您不能在画布上创建无限的项目,并且您创建的项目越多(即使您稍后销毁它们),画布的速度就越慢。虽然画布可以处理几千个项目,但一旦你开始处理数万个项目,你就会开始遇到问题。

【讨论】:

  • 真的吗?如果您创建 100 个项目,然后删除它们,所有画布仍将有 100 个项目??
  • @DanielCasasampera:是的,真的。删除项目后,画布不会重复使用项目 ID。它们是有限的资源。
  • 我不在乎如果 ids 不可重复使用但项目的信息肯定被遗忘了对吧?我的意思是没有办法恢复已删除的项目,对吧?因为那隐藏项目和删除项目有什么区别?
  • @DanielCasasampera:是的,信息的信息忘记了。如果你只是不断地创建越来越多的项目,你的程序最终会崩溃。
猜你喜欢
  • 2013-05-18
  • 2012-01-12
  • 2012-01-26
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多