向图形添加导航工具栏(matplotlib和PyQt4)

4
我想在我的PyQt4 GUI中创建一个导航工具栏,但是我无法使其正常工作。我必须承认,我大多数时间都是复制粘贴这段代码,我真的不理解它。如果您能告诉我如何添加NavigationToolbar并解释它是如何制作的,那将非常好。提前致谢。
顺便说一句,我看过这篇文章,但我认为它与我的情况不同,我无法弄清楚如何使用它。
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 matplotlibWidget(QtGui.QWidget):

    def __init__( self, parent = None ):
        QtGui.QWidget.__init__( self, parent )
        self.canvas = MplCanvas()
        #self.toolbar = self.canvas.toolbar #Dunno How :(

        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget( self.canvas )
        self.setLayout( self.vbl )
1个回答

6
我成功解决了问题,代码应该像这样:
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4 import NavigationToolbar2QT as NavigationToolbar
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 matplotlibWidget(QtGui.QWidget):

    def __init__( self, parent = None ):
        QtGui.QWidget.__init__( self, parent )
        self.canvas = MplCanvas() #create canvas that will hold our plot
        self.navi_toolbar = NavigationToolbar(self.canvas, self) #createa navigation toolbar for our plot canvas

        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget( self.canvas )
        self.vbl.addWidget(self.navi_toolbar)
        self.setLayout( self.vbl )

1
我在想是否有一种方法可以在画布类声明中声明NavigationToolbar,而不是在小部件/用户界面中声明。通常我的UI文件是从QtDesigner自动生成的,然后我只需要在主程序中导入它们并围绕它们构建逻辑,因此理想情况下,该程序中不应出现任何像.addWidget这样的内容。 - Guimoute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接