【发布时间】:2017-11-09 00:35:21
【问题描述】:
我有一个可以绘制大量数据的 tkinter 应用程序,我注意到当画布上有大量数据时平移和缩放性能很差。
查看 tkagg_backend(如this 和其他几个问题所建议的那样),该函数和文档建议只有在用户空闲时才应重绘画布。但是,根据当前和以前的经验,画布一直在更新(重绘)中间缩放/平移。因此,我正在查看所涉及的具体功能并对此有疑问。
dynamic_update 函数:
def dynamic_update(self):
'update drawing area only if idle'
# legacy method; new method is canvas.draw_idle
self.canvas.draw_idle()
canvas.draw_idle() 函数:
def draw_idle(self):
'update drawing area only if idle'
if self._idle is False:
return
self._idle = False
def idle_draw(*args):
try:
self.draw()
finally:
self._idle = True
self._idle_callback = self._tkcanvas.after_idle(idle_draw)
._idle参数在后端初始化为True。这就是我卡住的地方,因为我无法理解 ._idle 是如何与鼠标活动相关联的(我认为是这样,如果有错误请纠正我)。
有趣的是,通过注释self.canvas.draw_idle() 行(未按下鼠标按钮后重新绘制),画布的行为就像我所期望的那样,因此不会调用整个draw_idle 函数。
因此,我的问题是_idle 是如何设置的,或者为什么当我不是idle 时它会重绘我的整个画布?
【问题讨论】:
标签: python performance matplotlib tkinter tkinter-canvas