【发布时间】:2019-12-21 09:46:46
【问题描述】:
使用我的测试,我发现在画布上绘制每个形状后,它都会重新计算并绘制像素。
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.
这似乎非常低效,因为我试图每帧创建几十个形状(就像在每次模拟更新中一样)。最好等到我将所有绘制命令排入队列,然后告诉画布一次性重绘帧。
到目前为止,我尝试使用交互式外壳创建画布,而不在根上调用 mainloop 甚至 update,但是在每个绘制函数之后它都会重新绘制画布!
这样的事情会很理想:
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.
如果有办法解决这个问题,请告诉我。
【问题讨论】:
-
tk.Canvas不像你想象的那样工作:它不是pygame表面,或者其他一些 GUI 工具包画布。它的项目是单独绘制、移动、修改的;没有帧或 FPS 的真正概念。画布维护一个脏边界框,并且只重绘被改变的部分。