Matplotlib - 导航工具栏快捷方式不起作用

问题描述 投票:0回答:2

我在PyQt4 UI中嵌入了一个matplotlib图。就像是

Building a matplotlib GUI with Qt Designer.

在QVBoxlayout中添加了FigureCanvasQTAgg和NavigationToolbar2QT,UI的右侧是图名的QListWidget。

没有工具栏快捷方式正常工作。我尝试更改QVBoxlayout和QListWidget Widget的焦点。

图生成为

from matplotlib.figure import Figure
fig=figure()
ax=fig.add_subplot(111)
ax.plot.plot(np.random.rand(5))

此图传递给addmpl方法,其中生成画布和工具栏并将其添加到主窗口小部件。

def addmpl(self,fig):
    self.canvas = FigureCanvas(fig)
    self.mplvl.addWidget(self.canvas)
    self.canvas.draw()
    self.toolbar = NavigationToolbar(self.canvas,self.mplwindow)
    self.mplvl.addWidget(self.toolbar)

解决办法...

def menu(self):
    self.savefig=QtGui.QAction('&Save', self) 
    self.savefig.setShortcut('Ctrl+S')
    self.savefig.triggered.connect(self.save_figure)

    undo=QtGui.QAction('&Undo', self)
    undo.setShortcut('Ctrl+Z')
    undo.triggered.connect(self.back)

    redo=QtGui.QAction('&Redo', self)
    redo.setShortcut('Ctrl+Y')
    redo.triggered.connect(self.forward)

    figoptions=QtGui.QAction('&Figure Options', self)
    figoptions.setShortcut('Ctrl+F')
    figoptions.setStatusTip('Edit curves lines and axes parameters')
    figoptions.triggered.connect(self.edit_parameters)



def back(self):
    self.toolbar.back()
def forward(self):
    self.toolbar.forward()
def save_figure(self):
    self.toolbar.save_figure()
def edit_parameters(self):
    self.toolbar.edit_parameters()

但是像Constrain平移/缩放到x轴这样的快捷方式 - 使用鼠标进行平移/缩放时保持x看起来既困难又繁琐。

解决这个Question有同样的问题。(用NavigationToolbar2QT替换NavigationToolbar2QTAgg)

python qt matplotlib pyqt pyqt4
2个回答
2
投票

如果没有看到代码中你初始化图形的部分,并且在查看了qazxsw poi之后,我会猜测你没有配置键盘快捷键:

  1. 确保你有PyQt example
  2. 将matplotlib图形画布的按键绑定到处理程序: from matplotlib.backend_bases import key_press_handler
  3. 配置画布小部件以处理键盘事件: self.fig = Figure(...) self.canvas = FigureCanvas(self.fig) self.mpl_nav_toolbar = NavigationToolbar(...) ... self.canvas.mpl_connect('key_press_event', self.on_key_press)
  4. 定义您的处理程序以调用key_press_handler: ... self.canvas.setFocusPolicy(Qt.StrongFocus)

这些步骤也适用于PyQt5,BTW。


0
投票

这是PyQt特定的替代解决方案(使用PyQt5测试)。它不像mpl_connect('key_press_event'...)那样简洁,但允许更多的灵活性,例如重新定义快捷键。

NavigationToolbar2QT继承自QToolBar,QToolBar继承自QWidget。因此,工具栏上的所有操作都可以通过QWidget.actions()获得。

例如,可以定义全局快捷方式并将其连接到工具栏上的缩放:

def on_key_press(self, event):
    key_press_handler(event, self.canvas, self.mpl_nav_toolbar)
© www.soinside.com 2019 - 2024. All rights reserved.