10. PyQt5布局管理器

PyQt5布局管理器详解

PyQt5布局管理器

1. QBoxLayout 及其子类 (盒式布局)

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

布局管理器常用属性说明:
20221119175811

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

20221119203005

VBoxLayout与此类似。

2. QGridLayout 类(网格布局)

  1. 网格布局的原理如下图所示:

20221119182103

基本原理是把窗口划分为若干单元格,每个子部件被放置于一个或多个单元格之中,各单元格的大小可由拉伸因子和一行或列中单元格的数量来确定。若子部件的大小小于单元格,则可以设置该子部件位于单元格的什么位置,例如顶部、左侧、底部等。还可以设置该子部件是否可以拉伸以填满该单元格等等。

前面所介绍的QBoxLayout,可以看成是只有一行一列的网格布局。

  1. QGridLayout 类中的属性
  • horizontalSpacing: int
    访问函数: int horizontalSpacing() const; void setHorizontalSpacing(int spacing);
  • verticalSpacing: int
    访问函数: int verticalSpacing()const; void setVerticalSpacing(int spacing);

以上属性用于获取或设置垂直和水平方向子部件之间的间距。 以上属性其实设置的是
spcing 属性(注意:不是 QSpacerItem),布局不会为这些间距分配索引号。

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

20221119204411

3. QFormLayout 类(表单布局)

  1. QFormLayout 布局以两列的形式列出其子项目
  2. QFormLayout 被分成两列,左列是标签(label)部分,通常有标签QLabel组成,又列是由字段(field)部分,通常是QLineEdit行编辑器,或QSpinBox等部件,注意:QFormLayout的两列也可以是任意其他部件
  3. 使用 QFormLayout 可方便的管理“标签----字段”对形式布局的组件,使用该布局可快速
    的为 QLabel 设置其伙伴部件。其方法是使用成员函数 addRow(), 如下所示:
    formLayout->addRow(“&Name”, lineEdit); //添加一个名称为 Name 的标签,其伙伴为 lineEdit
  4. 通常QFormLayout布局是使用QGridLayout实现的。
  5. QFormLayout根据不同的平台,设置了不同的默认外观,例如:
    20221119192839
  6. QFormLayout 类中的枚举
    20221119193106
  7. QFormLayout 类中的属性
  • fieldGrowthPolicy: FieldGrowthPolicy
  • formAlignment: Qt::Alignment
  • labelAlignment: Qt::Alignment
  • rowWrapPolicy: RowWrapPolicy
  • horizontalSpacing: int
  • verticalSpacing: int
  1. QFormLayout 类中的方法
    具体可参考文档:https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qformlayout.html?highlight=qformlayout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值