2016-12-28 107 views
0

我在PyQt4 UI中嵌入了matplotlib图形。像Matplotlib - 导航工具栏快捷键不起作用

Building a matplotlib GUI with Qt Designer.

FigureCanvasQTAgg和NavigationToolbar2QT东西QVBoxlayout加入和用户界面的右侧是图名的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

解决方案有同样的问题。(NavigationToolbar2QTAgg与NavigationToolbar2QT代替)

+0

插槽是否被调用?也就是说,如果你把打印语句放在后面()向前()等你有什么在控制台从哪个GUI启动?如果没有,那么问题可能与如何集成工具栏相关,而不是实际的qactions,在这种情况下,您需要发布相关的代码。 – Schollii

+0

我在backend_bases.py的pan方法中放置了print(“Hello”)。按下p(快捷键用于平移)控制台保持空白。但是如果我点击工具栏中的平移按钮,控制台会打印出你好 – inxp

+0

示例代码可用[这里](http://blog.rcnelson.com/wp-content/uploads/2015/02/mpldesigner.zip) – inxp

回答

2

没有看到你的代码,你intialize图的一部分,并期待在PyQt example后,我瞎猜你有没有配置键盘快捷键:

  1. 确保您有from matplotlib.backend_bases import key_press_handler
  2. 绑定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) 
    
  3. 配置画布组件来处理键盘事件:

    ... 
    self.canvas.setFocusPolicy(Qt.StrongFocus) 
    
  4. 定义您的处理程序调用key_press_handler:

    def on_key_press(self, event): 
        key_press_handler(event, self.canvas, self.mpl_nav_toolbar) 
    

这些步骤应该PyQt5工作以及,顺便说一下。

+0

也许这是关于焦点....因为当我点击'T'按钮图列表中的选择更改为'两个阴谋'... ... – inxp

+0

试过这个......但它没有工作....更新的代码是可用的[这里](http://粘贴。co/f1a4561e).... UI文件可用[here](http://pasted.co/01627c4c)..... – inxp

+0

添加self.canvas.setFocusPolicy(Qt.StrongFocus)和self.canvas.setFocus( )解决了这个问题....感谢指出我在正确的方向..... – inxp