PyQt5 提供强大的布局管理器来有效地排列窗口部件。盒式布局,特别是 `QVBoxLayout`(垂直)和 `QHBoxLayout`(水平),是创建结构化用户界面的基础。本教程将探讨这些布局,演示它们的用法以及如何控制窗口部件的对齐方式。
目录:
垂直盒式布局 (QVBoxLayout)
`QVBoxLayout` 将窗口部件垂直排列,一个接一个地堆叠它们。这非常适合创建表单、列表或任何需要列式排列的场景。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("垂直盒式布局示例")
layout = QVBoxLayout()
layout.addWidget(QLabel("这是一个标签。"))
layout.addWidget(QPushButton("点击我!"))
layout.addWidget(QLabel("另一个标签。"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
此代码创建一个窗口,其中包含一个垂直布局,其中包含一个标签、一个按钮和另一个标签。
水平盒式布局 (QHBoxLayout)
`QHBoxLayout` 水平排列窗口部件,将它们并排放置。将其用于工具栏、对相关控件进行分组或将窗口部件排列成一行。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("水平盒式布局示例")
layout = QHBoxLayout()
layout.addWidget(QLabel("标签 1"))
layout.addWidget(QPushButton("按钮 1"))
layout.addWidget(QLabel("标签 2"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
此示例与前一个示例类似,但使用 `QHBoxLayout` 进行水平排列。
控制窗口部件对齐方式
盒式布局中的窗口部件默认为顶部/左对齐。要控制对齐方式,请使用 `setAlignment()` 方法和标志,例如 `Qt.AlignHCenter`(水平居中)、`Qt.AlignVCenter`(垂直居中)或它们的组合。这将窗口部件在其在布局中分配的空间内居中。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton, Qt
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("窗口部件对齐方式示例")
layout = QHBoxLayout()
label = QLabel("居中标签")
layout.addWidget(label)
layout.setAlignment(label, Qt.AlignHCenter | Qt.AlignVCenter)
button = QPushButton("按钮")
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
此示例在布局中水平和垂直居中一个标签。
嵌套布局以创建复杂的UI
对于更复杂的UI,将布局彼此嵌套。这允许对窗口部件放置进行复杂的安排和细粒度的控制。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("嵌套布局示例")
mainLayout = QVBoxLayout()
# 上部区域的水平布局
topLayout = QHBoxLayout()
topLayout.addWidget(QLabel("左上"))
topLayout.addWidget(QPushButton("右上"))
mainLayout.addLayout(topLayout)
# 下部区域的垂直布局
bottomLayout = QVBoxLayout()
bottomLayout.addWidget(QLabel("底部"))
mainLayout.addLayout(bottomLayout)
window.setLayout(mainLayout)
window.show()
sys.exit(app.exec_())
此示例演示了将水平布局嵌套在垂直布局中以创建两部分UI。
本教程提供了在 PyQt5 中使用盒式布局的基础。请浏览 PyQt5 文档以了解更高级的布局选项和功能,以构建复杂且用户友好的应用程序。