2017-04-02 99 views
2

我有一個matplotlib圖,其中我修改了工具欄/狀態欄信息,與this question一樣。這工作得很好,必要的信息顯示,因爲我需要它。強制更新爲matplotlib工具欄/狀態欄信息

但是,我經常需要使用新數據更新繪圖(通過在畫布對象上調用draw()完成)。儘管如此,工具欄/狀態欄信息不會更新,直到鼠標再次移動。只要畫布重新繪製,我希望更新這些信息,因爲這些信息中的一部分與新圖相關。

我試圖做到這一點是強制鼠標移動事件觸發。我試圖通過self.canvas.motion_notify_event(0,0)從畫布觸發事件,但這似乎並不奏效。我可以看到工具欄本身有一個mouse_move方法,但我不知道如何觸發它(或者即使它是我想要觸發的)。

如何在繪圖重繪過程中更新工具欄/狀態欄信息而無需用戶輕輕移動鼠標?

回答

0

做了很多挖掘和計算出來。 motion_notify_event方法是我正在尋找的,我只是用它錯了。您可以僞造matplotlib並使用此函數觸發MouseEvent,然後使matplotlib調用響應MouseEvents的所有函數,包括更新工具欄/狀態欄信息。

這裏的關鍵是我需要觸發MouseEvent,就好像它發生在軸對象內,而不是整個圖。函數的輸入是事件相對於圖形窗口左下角的(x,y)像素位置。通過使用(0,0),就像我在我的問題中所做的那樣,我說鼠標事件發生在圖形窗口的左下角,而不是軸本身。除非光標位於軸上,否則Matplotlib不會顯示工具欄/狀態欄信息。

你可以做的是在軸上選取一些隨機像素位置並將其用作位置。選擇這種像素位置的簡單方法是使用matplotlib transformations

的現在以下爲我的作品:

canvas.motion_notify_event(*ax.transAxes.transform([0,0])) 

當然,在我的情況,我不顯示鼠標的座標數據,讓您的使用情況可能會有所不同。