PYQT5 QMainWindow setCentralWidget 由多个框布局组成
PYQT5 QMainWindow setCentralWidget consisting of multiple box layouts
对于编程中的项目class,我们需要开发一个应用程序并且必须使用 PYQT5 作为 GUI。
我有一个基于 QMainWindow 的 class。有些代码行我不太明白。下面是初始化:
# Snippet 1
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
# self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("Main Window")
然后,定义了以下 variables/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)
程序本身没有错误,运行正常。但是 window 中只显示了片段 2 中的两个图。如果删除
self.main_widget
来自
l = QtWidgets.QVBoxLayout(self.main_widget)
并将括号留空,仅显示代码段 3 中的按钮。
下面的赋值是什么意思?
self.main_widget = QtWidgets.QWidget(self)
您能否将垂直和水平框布局合并为一个,从而将两个按钮和两个图形显示为中央小部件?
这是我最初的计划,我尝试使用 addLayout() 和 setLayout() 选项进行一些操作,想将这些布局添加到 setCentralWidget() 但没有成功。
您是否知道如何在基于 QMainWindow 的 class 中将多个框布局的组合显示为中央小部件?
非常感谢。 :)
您可以在布局上使用 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_())
对于编程中的项目class,我们需要开发一个应用程序并且必须使用 PYQT5 作为 GUI。
我有一个基于 QMainWindow 的 class。有些代码行我不太明白。下面是初始化:
# Snippet 1
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
# self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("Main Window")
然后,定义了以下 variables/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)
程序本身没有错误,运行正常。但是 window 中只显示了片段 2 中的两个图。如果删除
self.main_widget
来自
l = QtWidgets.QVBoxLayout(self.main_widget)
并将括号留空,仅显示代码段 3 中的按钮。
下面的赋值是什么意思?
self.main_widget = QtWidgets.QWidget(self)
您能否将垂直和水平框布局合并为一个,从而将两个按钮和两个图形显示为中央小部件? 这是我最初的计划,我尝试使用 addLayout() 和 setLayout() 选项进行一些操作,想将这些布局添加到 setCentralWidget() 但没有成功。
您是否知道如何在基于 QMainWindow 的 class 中将多个框布局的组合显示为中央小部件?
非常感谢。 :)
您可以在布局上使用 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_())