假设我有两个水平布局的按钮,我需要添加到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
已经有了顶级布局(对于菜单栏等等)。
因此,我的按钮不会显示。我怎样才能做到这一点?
答案 0 :(得分:2)
您可以创建QWidget
,将布局应用于它,并将其设置为中央窗口小部件:
centralWidget = QWidget()
centralWidget.setLayout(hbox)
self.setCentralWidget(centralWidget)