小部件内的导航工具栏

时间:2019-01-18 13:23:20

标签: python matplotlib pyqt4 navigationbar

我想将导航工具栏放在用Qt Designer创建的小部件中。

我有一个用QT设计器制作的GUI,它有10个选项卡。每个标签都有一个我提升为画布的小部件。

我想在每个小部件内放置一个导航工具栏。

到目前为止,我已经尝试过了。 但是这段代码只是在GUI顶部添加了一个导航工具栏

import woop
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar



from PyQt4 import Qt, QtCore,QtGui
from matplotlib import cm



from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
import os

class woop(QtGui.QMainWindow, woop.Ui_MainWindow):
    """

    Main control function for Woop GUI.



    """


    # ----------------------------
    def __init__(self, parent=None):
        """
        Setup the GUI, and connect the buttons to functions.
        """


        import os
        super(woop, self).__init__(parent)
        self.setupUi(self)


        toolBar1 = NavigationToolbar(self.widget_LID1, self)
        toolBar2 = NavigationToolbar(self.widget_LID2, self)
        toolBar3 = NavigationToolbar(self.widget_LID3, self)
        toolBar4 = NavigationToolbar(self.widget_LID4, self)
        toolBar5 = NavigationToolbar(self.widget_LID5, self)
        toolBar6 = NavigationToolbar(self.widget_LID6, self)
        toolBar7 = NavigationToolbar(self.widget_LID7, self)
        toolBar8 = NavigationToolbar(self.widget_LID8, self)
        toolBarALL = NavigationToolbar(self.widget_LID_ALL, self)
        toolBarMIR = NavigationToolbar(self.widget_MIR, self)
        self.addToolBar(toolBar1)
        self.addToolBar(toolBar2)
        self.addToolBar(toolBar3)
        self.addToolBar(toolBar4)
        self.addToolBar(toolBar5)
        self.addToolBar(toolBar6)
        self.addToolBar(toolBar7)
        self.addToolBar(toolBar8)
        self.addToolBar(toolBarALL)
        self.addToolBar(toolBarMIR)


        self.widget_LID1.figure.clear()
        self.widget_LID1.draw()

        self.widget_LID2.figure.clear()
        self.widget_LID2.draw()

        self.widget_LID3.figure.clear()
        self.widget_LID3.draw()

        self.widget_LID4.figure.clear()
        self.widget_LID4.draw()

        self.widget_LID5.figure.clear()
        self.widget_LID5.draw()

        self.widget_LID6.figure.clear()
        self.widget_LID6.draw()

        self.widget_LID7.figure.clear()
        self.widget_LID7.draw()

        self.widget_LID8.figure.clear()
        self.widget_LID8.draw()

        self.widget_LID_ALL.figure.clear()
        self.widget_LID_ALL.draw()

        self.widget_LID_14.figure.clear()
        self.widget_LID_14.draw()

        self.widget_LID_58.figure.clear()
        self.widget_LID_58.draw()

        self.widget_MIR.figure.clear()
        self.widget_MIR.draw()

def main():
    """
    Main function

    the only input to the GUI is the debug

    by default is set to INFO
    """
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = woop()
    #MainWindow.show()
    MainWindow.showMaximized()
    app.exec_()


if __name__ == '__main__':

    main()

my gui

2 个答案:

答案 0 :(得分:1)

尝试使用How to embed matplotlib in pyqt - for Dummies中所述的QVBoxLayout将每个工具栏直接添加到相应的小部件。

或者,如果您仍然喜欢使用QMainWindow的工具栏区域,则需要将currentChanged的{​​{1}}信号连接到一个插槽,该插槽用相应的工具栏代替到所选小部件的小部件。

答案 1 :(得分:0)

我设法以这种方式解决。 我创建了这个功能

def _initialize_widget(self,widget):
    """
    function that:
     - initialises every tab (widget)
     - add layout
     - add navigation toolbar and position it at the bottom of the tab
    :param widget:
    :return:
    """
    widget.figure.clear()
    widget.draw()

    widget.setLayout(QtGui.QVBoxLayout())
    widget.layout().setContentsMargins(0, 710, 50, -0)#(left, top, right, bottom)
    widget.layout().setSpacing(0)
    toolbar = NavigationToolbar(widget, self)
    widget.layout().addWidget(toolbar)
    widget.figure.clear()
    widget.draw()

然后初始化小部件(画布)

self._initialize_widget(self.widget_LID1)

通过这种方式,我在画布底部添加了一个导航工具栏。