Python 用Tkinter快速制作圆木

Python 用Tkinter快速制作圆木,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我想在Tkinter画布上画多达86000个(小圆圈)。平均而言,它将更像是8600个圆圈。有时只有400人。同时绘制的所有圆都相同(大小、颜色)。圆的半径与正在绘制的圆的数量有关(当有许多圆要绘制时,仅为1-2px),但半径的差异对总体影响不大 canvas.create_oval(px+r,py+r,px-r,py-r,fill='green')在计算时间上相当昂贵。理想情况下,我会预先创建圆圈,并根据需要将其副本粘贴到画布上 此时调用canvas.create_oval(…)86000次几

我想在Tkinter画布上画多达86000个(小圆圈)。平均而言,它将更像是8600个圆圈。有时只有400人。同时绘制的所有圆都相同(大小、颜色)。圆的半径与正在绘制的圆的数量有关(当有许多圆要绘制时,仅为1-2px),但半径的差异对总体影响不大

canvas.create_oval(px+r,py+r,px-r,py-r,fill='green')
在计算时间上相当昂贵。理想情况下,我会预先创建圆圈,并根据需要将其副本粘贴到画布上

此时调用canvas.create_oval(…)86000次几乎需要20秒。(决定在不到100毫秒的时间内绘制哪个圆的逻辑。)


我该如何复制一个圆而不是单独创建它们呢?

我认为没有任何方法可以加快创建圆的速度。画布的设计不是为了处理80000个对象,它不支持复制和粘贴项目(除了简单地创建具有相同坐标的新对象之外)。它可以处理几千件,甚至10000件在我的机器上也可以,但是86000件是很多

您可以尝试创建给定大小的单个图像(或具有预先计算的图像)。您可以使用一个PhotoImage实例在画布上创建所有图像。在我的机器上,我可以在几秒钟内在画布上创建100000个图像对象。然而,删除这么多对象仍然相当缓慢