панель инструментов навигации внутри виджета - PullRequest
0 голосов
/ 18 января 2019

Я бы хотел поместить панель инструментов навигации в виджет, который я создал с помощью Qt designer.

У меня есть графический интерфейс, созданный в QT конструкторе, который имеет 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 голосов
/ 21 января 2019

Мне удалось решить таким образом. Я создал эту функцию

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)

Таким образом, я добавляю панель навигации внизу холста.

0 голосов
/ 18 января 2019

Попробуйте добавить каждую панель инструментов непосредственно в соответствующий виджет, используя QVBoxLayout, как описано в Как встроить matplotlib в pyqt - для чайников .

Или, если вы все еще предпочитаетеиспользуйте область панели инструментов QMainWindow, вам необходимо подключить сигнал currentChanged QTabWidget к слоту, заменив панель инструментов на панель, соответствующую виджету выбранного виджета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...