[英]Matplotlib tkagg backend performance
我有一個可以繪制大量數據的tkinter應用程序,當畫布上有大量數據時,我注意到平移和縮放性能不佳。
查看tkagg_backend( 由此和其他幾個問題所建議),函數和文檔表明只有在用戶空閑時才應重繪畫布。 但是,從當前和以前的經驗來看,畫布一直在更新(重繪)mid zoom / pan。 因此,我正在研究所涉及的具體功能,並對此提出疑問。
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
時重繪整個畫布?
當引用“空閑”時,它不是用戶或他的鼠標活動,而是GUI主循環。 如果主循環當前不忙,則只應重繪畫布。 這里,當然self._idle
只引用GUI的matplotlib部分,而draw_idle
這個結構應該做的是防止畫布在繪制時被繪制。
平移或縮放時很容易發生這種情況。 鼠標移動到新位置,導致重新繪制。 當重繪正在進行時,鼠標已經進一步移動並導致下一次重繪。 在那個時間點,第一次重繪可能尚未完成,因此它將排隊。 等等,這樣在某些時候GUI可能會變得沒有響應。 為了防止這種情況,只有在前一個繪制完成后才會初始化新繪制,並且self._idle
為true或false引導此行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.