首页 文章

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

提问于
浏览
0

我在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)

1 回答

  • 2

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

    • 确保你有 from matplotlib.backend_bases import key_press_handler

    • 将matplotlib图形画布的按键绑定到处理程序:

    self.fig = Figure(...)
    self.canvas = FigureCanvas(self.fig)
    self.mpl_nav_toolbar = NavigationToolbar(...)
    ...
    self.canvas.mpl_connect('key_press_event', self.on_key_press)
    
    • 配置画布小部件以处理键盘事件:
    ...
    self.canvas.setFocusPolicy(Qt.StrongFocus)
    
    • 定义调用key_press_handler的处理程序:
    def on_key_press(self, event):
        key_press_handler(event, self.canvas, self.mpl_nav_toolbar)
    

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

相关问题