【发布时间】:2017-05-12 23:45:32
【问题描述】:
我在 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()
但是诸如将平移/缩放限制到 x 轴之类的快捷方式 - 使用鼠标进行平移/缩放时按住 x 看起来很难实现且乏味。
这个Question的解决方法有同样的问题。(用NavigationToolbar2QT替换NavigationToolbar2QTAgg)
【问题讨论】:
-
插槽是否被调用?即,如果您将打印语句放在 back() forward() 等中,您是否会在 GUI 启动的控制台中得到任何东西?如果不是,那么问题可能与工具栏的集成方式有关,而不是实际的 qaction,在这种情况下,您需要发布相关代码。
-
我在 backend_bases.py 的 pan 方法中加入了 'print("Hello")'。按 p(平移的快捷方式)控制台保持为空。但是,如果我单击工具栏中的平移按钮,控制台会打印 Hello。
-
示例代码可用here
-
所以你的意思是工具栏按钮的键盘快捷键不起作用,但按钮操作确实有效(如果你点击它们)?
-
是的...只有键盘快捷键不起作用...
标签: python qt matplotlib pyqt pyqt4