我有一个tkinter应用程序,可以绘制大量的数据,当我注意到画布上有大量数据时,平移和缩放性能不佳。Matplotlib tkagg后端性能
查看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
时,它会重新绘制整个画布?