10. PyQt5布局管理器

PyQt5布局管理器

  • PyQt5布局管理器
    • 1. QBoxLayout 及其子类 (盒式布局)
    • 2. QGridLayout 类(网格布局)
    • 3. QFormLayout 类(表单布局)

PyQt5布局管理器

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

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

布局管理器常用属性说明:
10. PyQt5布局管理器_第1张图片

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

10. PyQt5布局管理器_第2张图片

VBoxLayout与此类似。

2. QGridLayout 类(网格布局)

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

10. PyQt5布局管理器_第3张图片

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

前面所介绍的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_())

10. PyQt5布局管理器_第4张图片

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根据不同的平台,设置了不同的默认外观,例如:
    10. PyQt5布局管理器_第5张图片
  6. QFormLayout 类中的枚举
    10. PyQt5布局管理器_第6张图片
  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

你可能感兴趣的:(qt,开发语言,qt5,python,pyqt)