PYQT5 QMainWindow setCentralWidget consisting of multiple box layouts
对于编程类的项目,我们需要开发一个应用程序,并且必须将PYQT5用于GUI。
我有一个基于QMainWindow的类。有些代码行我不太了解。下面是初始化:
1 2 3 4 5 6 | # Snippet 1 class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) # self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("Main Window") |
然后,定义以下变量/ GUI元素:
1 2 3 4 5 6 7 8 | # Snippet 2 self.main_widget = QtWidgets.QWidget(self) l = QtWidgets.QVBoxLayout(self.main_widget) sc = MyStaticMplCanvas(width=5, height=4, dpi=100) # just some graph dc = MyDynamicMplCanvas(width=5, height=4, dpi=100) # another graph l.addWidget(sc) l.addWidget(dc) |
然后,我尝试添加具有以下内容的水平框布局:
1 2 3 4 5 6 | # Snippet 3 x = QtWidgets.QHBoxLayout(self.main_widget) # new b1 = QtWidgets.QPushButton("Test1") # new b2 = QtWidgets.QPushButton("Test2") # new x.addWidget(p1) # new x.addWidget(p2) # new |
最后,生成中央窗口小部件:
1 2 3 | # Snippet 4 self.main_widget.setFocus() self.setCentralWidget(self.main_widget) |
该程序本身不会产生任何错误,并且可以正常运行。但是窗口中仅显示代码段2中的两个图形。如果删除
1 | self.main_widget |
从
1 | l = QtWidgets.QVBoxLayout(self.main_widget) |
并将括号留空,仅显示代码段3中的按钮。
以下任务的含义是什么?
1 | self.main_widget = QtWidgets.QWidget(self) |
您是否可以将垂直和水平框布局组合为一个,从而将两个按钮以及两个图形显示为中央窗口小部件?
这是我最初的计划,我尝试了使用addLayout()和setLayout()选项进行一些操作,并想将这些布局添加到setCentralWidget()中,但没有成功。
您是否有关于如何在基于QMainWindow的类中将多个框布局的组合显示为中央窗口小部件的想法?
非常感谢你。 :)
您可以在布局上使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() # self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("Main Window") self.main_widget = QtWidgets.QWidget(self) self.main_widget.setFocus() self.setCentralWidget(self.main_widget) l = QtWidgets.QVBoxLayout(self.main_widget) sc = MyStaticMplCanvas(width=5, height=4, dpi=100) # just some graph dc = MyDynamicMplCanvas(width=5, height=4, dpi=100) # another graph l.addWidget(sc) l.addWidget(dc) # Snippet 3 x = QtWidgets.QHBoxLayout() # self.main_widget) # new b1 = QtWidgets.QPushButton("Test1") # new b2 = QtWidgets.QPushButton("Test2") # new x.addWidget(b1) # new + b1 x.addWidget(b2) # new + b2 l.addLayout(x) # <---- if __name__ =="__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = ApplicationWindow() MainWindow.show() sys.exit(app.exec_()) |