3

このに従って、matplotlib Figure を QTdesigner で生成された GUI に埋め込みました。これまでのところ動作していますが、プロットを操作して保存するには、GUI 内にツールバーを埋め込む必要もあります。サンプル コードを変更してツールバーを追加するにはどうすればよいですか? 私は多くの情報源をグーグルで検索しましたが、それらはすべて、本に記載されている例では機能しない独自のカスタム コードを持っています。

カスタム ウィジェット クラスを変更する必要があると思います。ウィジェット クラスのコードは次のとおりです。

元のコード (本から):

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

それを入れるために、新しいクラスやカスタム ウィジェットを作成する必要がありますか?

4

1 に答える 1

3

OK、さらにいじって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)

そして今、それは機能します。ありがとう!

于 2013-09-01T23:23:54.143 に答える