我在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)
如果没有看到代码中你初始化图形的部分,并且在查看了qazxsw poi之后,我会猜测你没有配置键盘快捷键:
from matplotlib.backend_bases import key_press_handler
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)
这些步骤也适用于PyQt5,BTW。
这是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)