为什么tkinter/窗口.更新在我的程序中随着时间的推移变慢?

2024-06-11 18:04:03 发布

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

我打电话的时候发现了窗口.更新,当向窗口写入的内容较少时,它的运行速度会快得多,但之后,当我向窗口写入更多元素时,窗口.更新需要更长时间。在

请参阅下面的代码。你可以看到它在更新窗口之前一次向屏幕100添加新的圆。在

我的问题是:为什么它会随着时间而变慢?在一开始,刷新每秒发生多次。半分钟后,大约每秒一次。。。在

起初,这对我来说似乎很奇怪,因为我认为简单地更改要刷新的像素,然后再刷新,每次的处理量将保持不变。但后来我想。。。这件事是继续“跟踪”和“解释”我先前放在窗户上的形状吗??在

不管怎么说,你对为什么它会变慢有什么想法或答案吗?在

from tkinter import *
from random import *
xsize=1000
ysize=1000
shapesize=10
window = Tk()
canvas = Canvas(window, width=xsize, height=ysize)
canvas.pack()
while True:
    for l in range(100):
        col=choice(['pink','green','orange','yellow','blue','purple','red','black','brown','gray'])
        x=randint(0,xsize)
        y=randint(0,ysize)

        canvas.create_oval(x,y,x+shapesize, y+shapesize, fill=col) 
    window.update()

Tags: 代码fromimport元素内容请参阅colwindow
1条回答
网友
1楼 · 发布于 2024-06-11 18:04:03

简短回答:

这是由于你使用的算法的复杂性。在

详细回答:

无限期地满足while条件。在

for循环退出后,立即要求画布重新绘制之前的所有椭圆。在

这意味着:

  • while迭代1,画布重画99个椭圆
  • while迭代2:画布重画99+99个椭圆
  • while迭代3:canvas重画99+99+99个椭圆。在
  • while迭代4:canvas重画99+99+99+99个椭圆。在
  • 。。。在
  • 。。。天啊!!!在

结论

你得到了你想要的。在

备选方案

如果要无限期地只绘制99个椭圆,请删除以前创建的每个99个椭圆。这意味着您可以在canvas.update()的正下方添加canvas.delete(ALL)

相关问题 更多 >