我有一个matplotlib图,其中我修改了工具栏/状态栏信息,就像在this question中一样。这很好用,我需要的时候会显示必要的信息。
但是,我经常需要使用新数据更新绘图(通过在canvas对象上调用draw()
来完成)。但是,在再次移动鼠标之前,工具栏/状态栏信息不会更新。我希望在重绘画布后立即更新此信息,因为其中一些信息与新图相关。
我尝试实现这一目标是强制触发鼠标移动事件。我试图通过self.canvas.motion_notify_event(0,0)
从画布触发事件,但这似乎不太好用。我可以看到工具栏本身有mouse_move
方法,但我不知道如何触发它(或者即使它是我要触发的东西)。
如何在绘图重绘期间强制更改工具栏/状态栏信息,而无需用户轻微移动鼠标?
答案 0 :(得分:0)
做了很多挖掘并弄明白了。我正在寻找motion_notify_event
方法,我只是错误地使用它。您可以使用此函数伪造matplotlib并触发MouseEvent,然后使matplotlib调用响应MouseEvents的所有函数,包括更新工具栏/状态栏信息。
这里的关键是我需要触发MouseEvent,就好像它发生在axis对象中,而不是整个图形。函数的输入是事件相对于图窗口左下角的(x,y)像素位置。通过在我的问题中使用(0,0),我说鼠标事件发生在图形窗口的左下角,而不是轴本身。除非光标位于轴上,否则Matplotlib不会显示工具栏/状态栏信息。
然后你可以做的是在轴上选择一些随机像素位置并将其用作位置。选择此类像素位置的一种简单方法是使用matplotlib transformations。
以下内容现在对我有用:
canvas.motion_notify_event(*ax.transAxes.transform([0,0]))
当然,在我的情况下,我没有显示鼠标的数据坐标,因此您的使用案例可能会有所不同。