Python 如何让tkinter推迟画布更新?

Python 如何让tkinter推迟画布更新?,python,canvas,tkinter,Python,Canvas,Tkinter,通过测试,我发现在画布上绘制每个形状后,都会重新计算并绘制像素 c = Canvas(root) c.pack() c.create_line(10, 10, 50, 50) # Draws line on canvas immediately. c.create_line(20, 20, 60, 60) # Draws second line on canvas. 这似乎效率很低,因为我试图在每帧中创建几十个形状(就像在每次模拟更新中一样)。最好等到我把所有的绘图命令都排好队,然后告诉画

通过测试,我发现在画布上绘制每个形状后,都会重新计算并绘制像素

c = Canvas(root)
c.pack()

c.create_line(10, 10, 50, 50)
# Draws line on canvas immediately.

c.create_line(20, 20, 60, 60)
# Draws second line on canvas.
这似乎效率很低,因为我试图在每帧中创建几十个形状(就像在每次模拟更新中一样)。最好等到我把所有的绘图命令都排好队,然后告诉画布一次性重画框架

到目前为止,我尝试使用交互式shell创建画布,但没有在根目录上调用
mainloop
甚至
update
,但是在每个draw函数之后,它会重新绘制画布

像这样的东西很理想:

c = Canvas(root)
c.pack()

c.queue_create_line(10, 10, 50, 50)
# Don't draw line yet.

c.queue_create_line(20, 20, 60, 60)
# Also don't draw yet.

c.draw_queue()
# Finally draw both lines at once.
如果有办法解决这个问题,请告诉我

通过测试,我发现在画布上绘制每个形状后,都会重新计算并绘制像素

c = Canvas(root)
c.pack()

c.create_line(10, 10, 50, 50)
# Draws line on canvas immediately.

c.create_line(20, 20, 60, 60)
# Draws second line on canvas.

您看到的行为只是因为您是从python shell运行的。在正常操作中,画布不会立即更新显示。只有在调用
update()
或函数退出并将控制权交还给事件循环时,显示才会更新。因为您是从pythonshell运行的,所以在处理每个命令后,显示会更新。

tk.Canvas
的工作方式与您想象的不同:它不是
pygame
表面,也不是其他GUI工具包画布。其项目可单独绘制、移动和修改;帧或FPS没有真正的概念。画布维护一个脏的边界框,并仅重新绘制已更改的部分。