Приложение QMdiarea с QSplitter и QMainWindow - PullRequest
1 голос
/ 03 июля 2019

Я хочу применить QMdiarea к QMainwindow с QSplitter, Есть несколько постов о QMdiarea, но ни один из них действительно не объясняет, как применять к таким QtWidgets.

Мой код:

class Mywindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Mywindow, self).__init__(parent)

        self.setMinimumSize(QtCore.QSize(1200,800))
        self.setWindowTitle('MdiArea')

        self.groupone = QtWidgets.QTextEdit()
        self.grouptwo = QtWidgets.QListWidget()
        self.groupthree = QtWidgets.QTextEdit()
        self.groupfour = QtWidgets.QListWidget()

        self.V_Splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        self.V_Splitter.addWidget(self.groupone)
        self.V_Splitter.addWidget(self.grouptwo)

        self.viewSplitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        self.viewSplitter.addWidget(self.groupthree)
        self.viewSplitter.addWidget(self.groupfour)

        self.mainSplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        self.mainSplitter.addWidget(self.V_Splitter)
        self.mainSplitter.addWidget(self.viewSplitter)

        self.setCentralWidget(self.mainSplitter)

        self.mainSplitter.setStretchFactor(0, 1)
        self.mainSplitter.setStretchFactor(1, 5)
        self.viewSplitter.setStretchFactor(0, 1)
        self.viewSplitter.setStretchFactor(1, 1)

        # Center window        
        qtRectangle = self.frameGeometry()
        centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    sim = Mywindow()
    sim.showMaximized()
    sys.exit(app.exec_())

Дисплей: enter image description here

Чего я хочу добиться: отображение результатов

enter image description here

Я ценю любую помощь.

1 Ответ

3 голосов
/ 03 июля 2019

Вы должны создать QMdiArea, установить его как centralWidget, а затем добавить mainSplitter, используя метод addSubWindow ():

class Mywindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Mywindow, self).__init__(parent)

        self.setMinimumSize(QtCore.QSize(1200, 800))
        self.setWindowTitle("MdiArea")

        self.mdiarea = QtWidgets.QMdiArea()
        self.setCentralWidget(self.mdiarea)

        self.groupone = QtWidgets.QTextEdit()
        self.grouptwo = QtWidgets.QListWidget()
        self.groupthree = QtWidgets.QTextEdit()
        self.groupfour = QtWidgets.QListWidget()

        self.V_Splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        self.V_Splitter.addWidget(self.groupone)
        self.V_Splitter.addWidget(self.grouptwo)

        self.viewSplitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        self.viewSplitter.addWidget(self.groupthree)
        self.viewSplitter.addWidget(self.groupfour)

        self.mainSplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        self.mainSplitter.addWidget(self.V_Splitter)
        self.mainSplitter.addWidget(self.viewSplitter)

        self.mainSplitter.setStretchFactor(0, 1)
        self.mainSplitter.setStretchFactor(1, 5)
        self.viewSplitter.setStretchFactor(0, 1)
        self.viewSplitter.setStretchFactor(1, 1)

        self.mdiarea.addSubWindow(self.mainSplitter)
        # ...

enter image description here

...