PyQt5布局管理器
1. QBoxLayout 及其子类 (盒式布局)
QBoxLayout盒式布局管理器,可以创建水平或垂直方向的布局管理器,使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。通常使用的是该类的两个子类QHBoxLayout和QVBoxLayout,因为子类有比较方便的构造函数。
布局管理器常用属性说明:

QBoxLayout的方法可以从以下链接查询到:
https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qboxlayout.html?highlight=qboxlayout
QHboxLayout简单示例程序:
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QApplication
from PyQt5.QtWidgets import QLabel
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
my_widget = QWidget()
layout = QHBoxLayout() # 新建水平布局管理器
h_label_1 = QLabel('这是水平label:1') # 新建两个label,加到QHBoxLayout中
h_label_2 = QLabel('这是水平label:2')
layout.addWidget(h_label_1) # 向QHBoxLayout添加label1
layout.addWidget(h_label_2) # 向QHBoxLayout添加label2
my_widget.setLayout(layout) # widget上应用QHBoxLayout布局
my_widget.show()
sys.exit(app.exec_())

VBoxLayout与此类似。
2. QGridLayout 类(网格布局)
- 网格布局的原理如下图所示:

基本原理是把窗口划分为若干单元格,每个子部件被放置于一个或多个单元格之中,各单元格的大小可由拉伸因子和一行或列中单元格的数量来确定。若子部件的大小小于单元格,则可以设置该子部件位于单元格的什么位置,例如顶部、左侧、底部等。还可以设置该子部件是否可以拉伸以填满该单元格等等。
前面所介绍的QBoxLayout,可以看成是只有一行一列的网格布局。
- QGridLayout 类中的属性
- horizontalSpacing: int
访问函数: int horizontalSpacing() const; void setHorizontalSpacing(int spacing); - verticalSpacing: int
访问函数: int verticalSpacing()const; void setVerticalSpacing(int spacing);
以上属性用于获取或设置垂直和水平方向子部件之间的间距。 以上属性其实设置的是
spcing 属性(注意:不是 QSpacerItem),布局不会为这些间距分配索引号。
- QGridLayout 类中的方法
详情可以参考
https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qgridlayout.html
QGridLayout 简单示例如下:
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
from PyQt5.QtWidgets import QFontComboBox, QPushButton, QTextEdit
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
my_widget = QWidget()
my_font_combo_box = QFontComboBox()
my_push_btn = QPushButton()
my_text_edit = QTextEdit()
my_grid_layout = QGridLayout()
my_grid_layout.addWidget(my_font_combo_box, 0, 0, 1, 2) # 添加部件,从row 0 column 0开始,占据1行2列
my_grid_layout.addWidget(my_push_btn, 0, 2, 1, 1) # 添加部件,从row 0, column 2开始,占据1行1列
my_grid_layout.addWidget(my_text_edit, 1, 0, 1, 3) # 添加部件,从row 1, column 0开始,占据1行3列
my_widget.setLayout(my_grid_layout)
my_widget.show()
sys.exit(app.exec_())

3. QFormLayout 类(表单布局)
- QFormLayout 布局以两列的形式列出其子项目
- QFormLayout 被分成两列,左列是标签(label)部分,通常有标签QLabel组成,又列是由字段(field)部分,通常是QLineEdit行编辑器,或QSpinBox等部件,注意:QFormLayout的两列也可以是任意其他部件
- 使用 QFormLayout 可方便的管理“标签----字段”对形式布局的组件,使用该布局可快速
的为 QLabel 设置其伙伴部件。其方法是使用成员函数 addRow(), 如下所示:
formLayout->addRow(“&Name”, lineEdit); //添加一个名称为 Name 的标签,其伙伴为 lineEdit - 通常QFormLayout布局是使用QGridLayout实现的。
- QFormLayout根据不同的平台,设置了不同的默认外观,例如:

- QFormLayout 类中的枚举

- QFormLayout 类中的属性
- fieldGrowthPolicy: FieldGrowthPolicy
- formAlignment: Qt::Alignment
- labelAlignment: Qt::Alignment
- rowWrapPolicy: RowWrapPolicy
- horizontalSpacing: int
- verticalSpacing: int
PyQt5布局管理器详解
380

被折叠的 条评论
为什么被折叠?



