如何使布局成为QMainWindow的主要小部件

时间:2017-12-20 08:22:15

标签: python pyqt5

假设我有两个水平布局的按钮,我需要添加到QMainWindow(基本上是一个带有菜单栏的应用程序和主区域中的两个按钮)。

我尝试以这种方式实施

class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        # Menus
        exitAct = QAction(QIcon('exit.png'), '&Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Exit application')
        exitAct.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)

        # central widget
        firstButton = QPushButton("first")
        secondButton = QPushButton("second")

        hbox = QHBoxLayout()
        hbox.addWidget(firstButton)
        hbox.addWidget(secondButton)

        # Not working because TypeError: setCentralWidget(self, QWidget): argument 1 has unexpected type 'QHBoxLayout'
        # self.setCentralWidget(hbox)

        # Not working because centralWidget is not set, therefore is null
        # self.centralWidget().setLayout(hbox)

        # Not working because this is a QMainWindow, and the top-level widget already has a layout containing the menu bar for instance
        self.setLayout(hbox)

        self.setGeometry(300, 300, 300, 190)
        self.setWindowTitle('Points')
        self.show()

我已经定义了两个按钮,创建了一个水平布局并将按钮添加到布局中。现在我需要告诉我的窗口使用这种布局。

但是,我无法将布局添加到QMainWindow,因为QMainWindow已经有了顶级布局(对于菜单栏等等)。

因此,我的按钮不会显示。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以创建QWidget,将布局应用于它,并将其设置为中央窗口小部件:

centralWidget = QWidget()
centralWidget.setLayout(hbox)
self.setCentralWidget(centralWidget)