PYQT5 QMainWindow setCentralWidget 由多个框布局组成



对于编程类中的项目,我们需要开发一个应用程序,并且必须将 PYQT5 用于 GUI。

我有一个基于QMainWindow的课程。有些代码行我不太明白。下面是初始化:

# Snippet 1
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
# self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("Main Window")

然后,定义以下变量/GUI 元素:

# 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)

然后,我尝试添加具有以下内容的水平框布局:

# 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

最后,生成中央小部件:

# Snippet 4
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)

程序本身不会产生错误并且可以正常工作。但窗口中仅显示代码段 2 中的两个图表。如果您删除

self.main_widget 

l = QtWidgets.QVBoxLayout(self.main_widget) 

并将括号留空,仅显示代码段 3 中的按钮。

以下作业背后的含义是什么?

self.main_widget = QtWidgets.QWidget(self)

您是否能够将垂直和水平框布局合并为一个布局,从而将两个按钮以及两个图形显示为中央小部件? 这是我最初的计划,我尝试了一些使用addLayout()和setLayout()选项的东西,并希望将这些布局添加到setCentralWidget()中,但没有成功。

您是否知道如何在基于 QMainWindow 的类中将多个框布局的组合显示为中心小部件?

非常感谢。:)

您可以使用布局上的addLayout()嵌套布局;然后,内部布局将成为插入到的布局的子级。

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_())        

相关内容

  • 没有找到相关文章

最新更新