具有QGroupBoxes的QMainWindow

时间:2019-07-25 05:26:05

标签: python user-interface pyqt5 qmainwindow qgroupbox

我没有找到适合我问题的解决方案。所以这是我的问题:

我有一个QMainWindow,我需要两个QGroupboxes。通过我的菜单栏,我想选择可以看到的QGroupbox。 例如,当我在菜单栏中单击“ Groupbox 1”时,我想在QMainWindow中看到Groupbox1。

我以某种方式无法找到有关在QMainWindow上设置QGroupboxes的很好的解释。 有谁知道如何解决我的问题或所有QGroupbox方法的链接?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将组框添加到QStackedWidget中,并在触发菜单操作时设置堆叠小部件的当前索引,例如

from PyQt5 import QtCore, QtWidgets

class MyGroupBox(QtWidgets.QGroupBox):
    def __init__(self, label, bg_color, parent = None):
        super().__init__(label, parent)
        self.label = QtWidgets.QLabel(f'In {label}', self)
        self.label.setAutoFillBackground(True)
        self.label.setStyleSheet(f'background-color:{bg_color}; font-size:24px; qproperty-alignment: AlignCenter')

        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.label)

class MyMainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        stacked_widget = QtWidgets.QStackedWidget()

        self.groupbox1 = MyGroupBox('Group box 1', 'red')
        self.groupbox2 = MyGroupBox('Group box 2', 'green')

        stacked_widget.addWidget(self.groupbox1)
        stacked_widget.addWidget(self.groupbox2)

        self.setCentralWidget(stacked_widget)

        view_menu = self.menuBar().addMenu('View')
        view_box1_action = view_menu.addAction('Groupbox 1')
        view_box2_action = view_menu.addAction('Groupbox 2')

        view_box1_action.triggered.connect(lambda: stacked_widget.setCurrentIndex(0))
        view_box2_action.triggered.connect(lambda: stacked_widget.setCurrentIndex(1))

        self.resize(400,400)

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    main_window = MyMainWindow()
    main_window.show()
    app.exec()