2013-08-30 72 views
3

我一直在關注此chapter以將matplotlib圖形嵌入到QTdesigner生成的GUI中。到目前爲止它工作正常,但我需要在GUI中嵌入工具欄來操作繪圖並保存它。我如何修改示例代碼來添加工具欄?我搜索了很多來源,他們都有自己的自定義代碼,不符合本書中給出的示例。使用matplotlib自定義小部件在pyqt4中嵌入matplotlib工具欄

我相信我需要修改自定義控件類。窗口小部件類的代碼是在這裏:

原代碼(從書):

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 

我需要創建一個新的類和/或自定義的widget把它嗎?

+0

好吧,經過更多的研究並查看[link](http://eli.thegreenplace.net/files/prog_code/qt_mpl_bars.py.txt)後,我將類MplWidget修改爲:'class MplWidget(QtGui。 QWidget的): DEF __init __(個體,父母=無): QtGui.QWidget .__初始化__(個體,父母) self.canvas = MplCanvas() self.mpl_toolbar = NavigationToolbar(self.canvas,自我) 自我。 VBL = QtGui.QVBoxLayout() self.vbl.addWidget(self.canvas) self.vbl.addWidget(self.mpl_toolbar) self.setLayout(self.vbl) ' 現在它起作用了。謝謝! – railsnoob123

+1

請發表評論作爲答案並接受它。 – tacaswell

回答

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) 

而現在它的工作原理。謝謝!