使用matplotlib自定义小部件在matq4中嵌入matplotlib工具栏

时间:2013-08-30 18:51:16

标签: python qt matplotlib pyqt

我一直在关注这个chapter,将matplotlib图嵌入到QTdesigner生成的GUI中。到目前为止它的工作原理,但我还需要在GUI中嵌入工具栏来操作绘图并保存它。如何修改示例代码以添加工具栏?我搜索了很多来源,他们都有自己的自定义代码,不适用于本书中给出的示例。

我相信我需要修改自定义窗口小部件类。 widget类的代码在这里:

原始代码(来自书籍):

from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

from matplotlib.figure import Figure

class MplCanvas(FigureCanvas):
    def __init__(self):
        self.fig = Figure()       
        self.ax = self.fig.add_subplot(111)
        FigureCanvas.__init__(self, self.fig)
        FigureCanvas.setSizePolicy(self,
        QtGui.QSizePolicy.Expanding,
        QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

class MplWidget(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()      
        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget(self.canvas)     
        self.setLayout(self.vbl)

我的问题是如何添加代码以使工具栏显示在画布上?

我知道我必须使用以下方法导入api:

from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar

我是否需要创建一个新类和/或自定义小部件才能将其放入?

1 个答案:

答案 0 :(得分:3)

好的,在更多摆弄并查看link之后,我将类MplWidget修改为:

class MplWidget(QtGui.QWidget):
     def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.mpl_toolbar = NavigationToolbar(self.canvas, self)
        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.vbl.addWidget(self.mpl_toolbar)
        self.setLayout(self.vbl)

现在它有效。谢谢!