Python 3.x Pyqt5中嵌入的Matplotlib导航工具栏

Python 3.x Pyqt5中嵌入的Matplotlib导航工具栏,python-3.x,matplotlib,pyqt5,Python 3.x,Matplotlib,Pyqt5,我正在尝试将NavigationToolbar添加到我的工具中。我设法将它嵌入到一个小部件中,但只有“保存图形”选项(以绿色突出显示)起作用。缩放和编辑选项(红色)被禁用。我不明白为什么有些功能在save选项起作用时不起作用。多谢各位 到目前为止,我的代码是: class Ui_MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(Ui_MainWindow, sel

我正在尝试将NavigationToolbar添加到我的工具中。我设法将它嵌入到一个小部件中,但只有“保存图形”选项(以绿色突出显示)起作用。缩放和编辑选项(红色)被禁用。我不明白为什么有些功能在save选项起作用时不起作用。多谢各位

到目前为止,我的代码是:

class Ui_MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(Ui_MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.btn_map_country.clicked.connect(self.map_country)
        self.graph2 = MyCanvas()
        self.gridLayout_3.addWidget(self.graph2, 0, 2, 1, 1)

    def map_country(self):
        self.graph2.figure.clf()
        self.axes = self.graph2.figure.add_subplot(111)

        map = Basemap(projection='cyl',lon_0=0,resolution='l')
        map.readshapefile('shape_test', 'state')

        countries = ['Australia', 'Canada', 'France', 'Russia']
        patches   = []
        patches2   = []

        for info, shape in zip(map.state_info, map.state):
            if info['ADMIN'] in countries:
                patches.append( Polygon(np.array(shape), True) )
            else:
                patches2.append( Polygon(np.array(shape), True) )

        self.axes.add_collection(PatchCollection(patches, facecolor= '#81F781', edgecolor='k', linewidths=0.5, zorder=2))
        self.axes.add_collection(PatchCollection(patches2, facecolor= '#DAD3D1', edgecolor='k', linewidths=0.5, zorder=2))

        map.drawmapboundary(fill_color='#A9D0F5')
        self.graph2.draw()

class MyCanvas(FigureCanvas):
    def __init__(self, *args, **kwargs):
        self.figure = plt.figure()
        FigureCanvas.__init__(self, self.figure)
        self.figure.patch.set_facecolor("None")
        self.canvas = FigureCanvas(self.figure)
        toolbar = NavigationToolbar(self.canvas, self)
结果如下:

您没有保存对工具栏的引用,因此我猜它正在被垃圾收集

将工具栏实例化行更改为:

self.toolbar = NavigationToolbar(self.canvas, self)
<>编辑:考虑遵循堆栈溢出模式(明确地将工具栏和画布添加到Qt布局等)。