我想在Tkinter Canvas上绘制多达86,000个(小圆圈)。平均而言,它将更像是8,600个圈子。有时只有400个。一次绘制的所有圆都是相同的(大小,颜色)。圆的半径与绘制的圆的数量有关(当绘制多个圆时,只有1-2px),但半径差异对整体影响不大。
canvas.create_oval(px+r,py+r,px-r,py-r,fill='green')
在计算时间上非常昂贵。理想情况下,我会根据需要预先创建圆圈并在画布上粘贴它的副本。
目前拨打canvas.create_oval(...)
86,000次需要将近20秒。 (决定在不到100毫秒内自己运行的圆圈的逻辑。)
如何复制单个圆圈而不是单独创建它们?
答案 0 :(得分:1)
我认为你无法做任何事情来加速圈子的创造。画布不是为处理80,000个对象而设计的,它不支持复制和粘贴项目的能力(除了简单地创建具有相同坐标的新对象)。它可以处理好几千个,甚至一万个在我的机器上也非常高效,但是86,000个项目很多。
您可以尝试创建给定大小的单个图像(或具有预先计算的图像)。您可以使用一个PhotoImage实例来创建画布上的所有图像。在我的机器上,我可以在几秒钟内在画布上创建100,000个图像对象。 删除然而,许多对象仍然很慢。