我有一个带有嵌入式matplotlib数字的PyQt4应用程序。
如您所见,我已将导航工具栏添加为小部件。我希望能够根据左侧图表上显示的数据更新右侧的图表。似乎最简单的方法是劫持“缩放”中包含的信息。或者至少知道缩放何时发生,这样我就可以在右边重新计算并重绘。任何人都有一个很好的方法(从pick_event级别重新实现将是最后的手段)?
答案 0 :(得分:1)
我想出的最好的方法是创建一个自定义导航工具栏,其中NavigationToolbar作为父级。然后我只是向自定义版本添加了一个信号并覆盖了draw方法。通过这种方式,我可以调用原始绘制方法,并使用NavigationToolbar数据结构中需要的任何信息发出信号。
class NavigationToolbarCustom(NavigationToolbar):
zoom_changed = pyqtSignal(float, float, name='zoomChanged')
def __init__(self, canvas, parent):
NavigationToolbar.__init__(self, canvas, parent)
#super(NavigationToolbarCustom, self).__init__(self, canvas, parent)
def draw(self):
super(NavigationToolbarCustom,self).draw()
if self._xypress == None:
home_view = self._views.home()
Xmin,Xmax = home_view[0][0:2]
else:
lastx, lasty, a, ind, lim, trans = self._xypress[0]
Xmin,Xmax=a.get_xlim()
self.zoom_changed.emit(Xmin,Xmax)