class QFormLayout#

QFormLayout 类管理输入小部件及其关联的标签表单。 更多

Inheritance diagram of PySide6.QtWidgets.QFormLayout

概述#

属性#

方法#

注意

此文档可能包含自动从C++翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译中的问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告诉我们

详细描述#

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

QFormLayout 是一个便利的布局类,它以两列形式排列其子项。左列由标签组成,右列由“字段”小部件组成(行编辑器、微调框等)。

传统上,这种两列表单布局使用 QGridLayout 实现。 QFormLayout 是一个更高级别的替代方案,它具有以下优点

  • 遵守不同平台的视觉风格指南。

    例如,macOS Aqua和KDE指南指定标签应该是右对齐的,而Windows和GNOME应用程序通常使用左对齐。

  • 支持长行的换行。

    对于具有小显示屏的设备,QFormLayout 可以设置为wrap long rows,甚至可以设置为wrap all rows

  • 创建标签-字段对便捷的API。

    带有QString和QWidget *的addRow()重载在幕后创建一个QLabel并在其自动设置其伙伴。然后我们可以编写如下代码

    formLayout = QFormLayout(self)
    formLayout.addRow(tr("Name:"), nameLineEdit)
    formLayout.addRow(tr("Email:"), emailLineEdit)
    formLayout.addRow(tr("Age:"), ageSpinBox)
    

    与以下使用QGridLayout编写的代码进行比较

    gridLayout = QGridLayout(self)
    nameLabel = QLabel(tr("Name:"))
    nameLabel.setBuddy(nameLineEdit)
    emailLabel = QLabel(tr("Name:"))
    emailLabel.setBuddy(emailLineEdit)
    ageLabel = QLabel(tr("Name:"))
    ageLabel.setBuddy(ageSpinBox)
    gridLayout.addWidget(nameLabel, 0, 0)
    gridLayout.addWidget(nameLineEdit, 0, 1)
    gridLayout.addWidget(emailLabel, 1, 0)
    gridLayout.addWidget(emailLineEdit, 1, 1)
    gridLayout.addWidget(ageLabel, 2, 0)
    gridLayout.addWidget(ageSpinBox, 2, 1)
    

下表显示了不同样式下的默认外观。

派生的QCommonStyle样式(除了QPlastiqueStyle)

QMacStyle

QPlastiqueStyle

Qt Extended样式

qformlayout-win1

qformlayout-mac2

qformlayout-kde3

qformlayout-qpe4

传统的样式用于Windows、GNOME以及较早版本的KDE。标签左对齐,扩展字段增长以填充可用空间。(这通常对应于我们使用两列网格布局得到的结果。

基于macOS Aqua 规范的样式。标签右对齐,字段不会超出其大小提示,并且表单水平居中。

推荐用于KDE应用程序的样式。与MacStyle类似,但表单左对齐,并且所有字段都增长以填充可用空间。

Qt Extended样式的默认样式。标签右对齐,扩展字段增长以填充可用空间,并为长行启用换行。

可以通过调用 setLabelAlignment , setFormAlignment , setFieldGrowthPolicysetRowWrapPolicy 等方法单独覆盖表单样式。例如,为了模拟所有平台上的QMacStyle表单布局的外观,但标签左对齐,你可以编写:

formLayout.setRowWrapPolicy(QFormLayout.DontWrapRows)
formLayout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)
formLayout.setFormAlignment(Qt.AlignHCenter | Qt.AlignTop)
formLayout.setLabelAlignment(Qt.AlignLeft)
class FieldGrowthPolicy#

此枚举指定了可用于控制表单字段增长方式的策略。

常量

描述

QFormLayout.FieldsStayAtSizeHint

字段从不超出其大小提示。这是QMacStyle的默认值。

QFormLayout.ExpandingFieldsGrow

具有水平大小策略为扩展或最小扩展的字段将增长以填充可用空间。其他字段不会超出其有效大小提示。这是Plastique的默认策略。

QFormLayout.AllNonFixedFieldsGrow

所有允许增长的大小策略的字段将增长以填充可用空间。这是大多数样式的默认策略。

class RowWrapPolicy#

该枚举指定了可以通过控制表格行折绕方式的策略。

常量

描述

QFormLayout.DontWrapRows

字段始终与其标签一起布局。除了Qt Extended样式之外,这是所有样式的默认策略。

QFormLayout.WrapLongRows

标签分配足够的水平空间以适应最宽的标签,其余空间分配给字段。如果字段对的最小宽度大于可用空间,该字段将折绕到下一行。这是Qt Extended样式的默认策略。

QFormLayout.WrapAllRows

字段始终在标签下方布局。

另见

rowWrapPolicy

class ItemRole#

该枚举指定可能在行中出现的小部件(或其他布局项)的类型。

常量

描述

QFormLayout.LabelRole

标签小部件。

QFormLayout.FieldRole

字段小部件。

QFormLayout.SpanningRole

跨越标签和字段列的小部件。

注意

属性可以在使用 from __feature__ import true_property 时直接使用,否则通过访问器函数使用。

property fieldGrowthPolicyᅟ: QFormLayout.FieldGrowthPolicy#

该属性保存了表格字段增长的方式。

默认值取决于小部件或应用程序样式。对于QMacStyle,默认是 FieldsStayAtSizeHint;对于QCommonStyle 派生样式(如Plastique和Windows),默认是 ExpandingFieldsGrow;对于Qt Extended样式,默认是 AllNonFixedFieldsGrow

如果没有字段可以增长,当表格大小调整时,额外空间将按当前 form alignment 分配。

访问函数
property formAlignmentᅟ: Combination of Qt.AlignmentFlag#

该属性保存了表格布局内容在布局几何形状内的对齐方式。

默认值取决于小部件或应用程序的样式。对于QMacStyle,默认为Qt::AlignHCenter | Qt::AlignTop;对于其他样式,默认为Qt::AlignLeft | Qt::AlignTop。

访问函数
属性 horizontalSpacing: int#

此属性存储了并排排列的部件之间的间距。

默认情况下,如果没有明确设置值,布局的水平间距将继承自父布局或父小部件的样式设置。

访问函数
属性 labelAlignment: Qt.AlignmentFlag的组合#

此属性存储了标签的水平对齐方式。

默认值取决于小部件或应用程序的样式。对于派生于QCommonStyle的样式,除QPlastiqueStyle外,默认为Qt::AlignLeft;对于其他样式,默认为Qt::AlignRight。

另见

formAlignment

访问函数
属性 rowWrapPolicy: QFormLayout.RowWrapPolicy#

此属性存储了表格行换行的方式。

默认值取决于小部件或应用程序的样式。对于Qt Extended样式,默认为WrapLongRows;对于其他样式,默认为DontWrapRows

如果您想在标签的上方显示每个字段(而不是旁边),将此属性设置为WrapAllRows

访问函数
属性 verticalSpacing: int#

此属性存储了垂直排列的部件之间的间距。

默认情况下,如果没有显式设置值,布局的垂直间距将继承自父布局或父小部件的样式设置。

访问函数
__init__([parent=None])#
参数:

parentQWidget

使用给定的 parent 小部件构造一个新的表单布局。

该布局直接设置为您父小部件的最顶级布局。一个部件只能有一个顶级布局。它由 layout() 返回。

另见

setLayout()

addRow(layout)#
参数:

layoutQLayout

这是一个重载函数。

将指定的 layout 添加到此表单布局的末尾。该 layout 涵盖两个列。

addRow(labelText, field)
参数:
  • labelText – 字符串

  • fieldQWidget

这是一个重载函数。

这个重载函数在后台自动创建一个带有 labelText 文本的 QLabel。将 field 设置为新的 QLabelbuddy

addRow(labelText, field)
参数:
  • labelText – 字符串

  • fieldQLayout

这是一个重载函数。

这个重载函数在后台自动创建一个带有 labelText 文本的 QLabel

addRow(label, field)
参数:

在此表单布局底部添加一行,包含给定的 labelfield

另见

insertRow()

addRow(label, field)
参数:

这是一个重载函数。

addRow(widget)
参数:

widgetQWidget

这是一个重载函数。

将指定的 widget 添加到此表单布局的末尾。该 widget 横跨两列。

fieldGrowthPolicy()#
返回类型::

FieldGrowthPolicy

属性 fieldGrowthPolicyᅟ 的获取器。

formAlignment()#
返回类型::

AlignmentFlag 的组合

属性 formAlignmentᅟ 的获取器。

getItemPosition(index)#
参数:

index – int

返回类型::

PyObject

检索指定 index 的项的行和角色(列)。如果 index 超出范围,则将 *``rowPtr`` 设置为 -1;否则,将行存储在 *``rowPtr`` 中,并将角色存储在 *``rolePtr`` 中。

getLayoutPosition(layout)#
参数:

layoutQLayout

返回类型::

PyObject

检索指定子 layout 的行和角色(列)。如果 layout 不在表单布局中,则将 *``rowPtr`` 设置为 -1;否则,行存储在 *``rowPtr`` 中,角色存储在 *``rolePtr`` 中。

getWidgetPosition(widget)#
参数:

widgetQWidget

返回类型::

PyObject

获取布局中指定 widget 的行和角色(列)。如果 widget 不在布局中,则 *``rowPtr`` 被设置为 -1;否则,行存储在 *``rowPtr`` 中,角色存储在 *``rolePtr`` 中。

horizontalSpacing()#
返回类型::

int

属性 horizontalSpacing 的获取器。

insertRow(row, label, field)#
参数:

这是一个重载函数。

insertRow(row, labelText, field)
参数:
  • row – int

  • labelText – 字符串

  • fieldQWidget

这是一个重载函数。

这个重载函数在后台自动创建一个带有 labelText 文本的 QLabel。将 field 设置为新的 QLabelbuddy

insertRow(row, labelText, field)
参数:
  • row – int

  • labelText – 字符串

  • fieldQLayout

这是一个重载函数。

这个重载函数在后台自动创建一个带有 labelText 文本的 QLabel

insertRow(row, widget)
参数:

这是一个重载函数。

在表单布局中将指定 widget 插入到位置 row。该 widget 占据两个列。如果 row 超出范围,则 widget 被添加到最后。

insertRow(row, label, field)
参数:

在表单布局中的位置 row 插入一个新的行,并带有指定的 labelfield。如果 row 超出范围,则新行被添加到最后。

另见

addRow()

insertRow(row, layout)
参数:

这是一个重载函数。

在表单布局中将指定的 layout 插入到位置 row。该 layout 占据两个列。如果 row 超出范围,则该部件被添加到最后。

isRowVisible(layout)#
参数:

layoutQLayout

返回类型::

bool

这是一个重载函数。

如果对应于 layout 的行中的一些元素可见,则返回 true,否则返回 false。

isRowVisible(widget)
参数:

widgetQWidget

返回类型::

bool

这是一个重载函数。

如果对应于 widget 的行中的一些元素可见,则返回 true,否则返回 false。

isRowVisible(row)
参数:

row – int

返回类型::

bool

如果行 row 中有可见项目,则返回 true,否则返回 false。

itemAt(row, role)#
参数:
返回类型::

QLayoutItem

返回给定 row 中指定 role(列)的布局项。如果没有这样的项,则返回 None

labelAlignment()#
返回类型::

AlignmentFlag 的组合

属性 labelAlignment 的获取器。

labelForField(field)#
参数:

fieldQWidget

返回类型::

QWidget

返回与给定 field 关联的标签。

另见

itemAt()

labelForField(field)
参数:

fieldQLayout

返回类型::

QWidget

这是一个重载函数。

removeRow(layout)#
参数:

layoutQLayout

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

这是一个重载函数。

从此表单布局中删除与 layout 相关的行。

在此调用后,rowCount() 将减一。所有占用此行的小部件和嵌套布局都将被删除。这包括字段小部件以及任何标签。所有后续行都将上移一行,释放的垂直空间将重新分配给剩余行。

您可以使用此函数来撤销之前的 addRow()insertRow()

flay = ...
vbl = QVBoxLayout()
flay.insertRow(2, "User:", vbl)
# later:
flay.removeRow(layout) # vbl == None at this point

如果您想在不清除插入布局的情况下从表单布局中删除行,请使用 takeRow()

另见

takeRow()

removeRow(widget)
参数:

widgetQWidget

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

这是一个重载函数。

从此表单布局中删除与 widget 相关的行。

在此调用后,rowCount() 将减一。所有占用此行的小部件和嵌套布局都将被删除。这包括字段小部件以及任何标签。所有后续行都将上移一行,释放的垂直空间将重新分配给剩余行。

您可以使用此函数来撤销之前的 addRow()insertRow()

flay = ...
le = QLineEdit()
flay.insertRow(2, "User:", le)
# later:
flay.removeRow(le) # le == None at this point

如果您想在保留小部件的情况下从布局中删除行,请使用 takeRow() 替代。

另见

takeRow()

removeRow(row)
参数:

row – int

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

从表单布局中删除 row 行。

row 必须是非负数且小于 rowCount()

在此调用后,rowCount() 将减一。所有占用此行的小部件和嵌套布局都将被删除。这包括字段小部件以及任何标签。所有后续行都将上移一行,释放的垂直空间将重新分配给剩余行。

您可以使用此函数来撤销之前的 addRow()insertRow()

flay = ...
le = QLineEdit()
flay.insertRow(2, "User:", le)
# later:
flay.removeRow(2) # le == None at this point

如果您想在保留小部件的情况下从布局中删除行,请使用 takeRow() 替代。

另见

takeRow()

rowCount()#
返回类型::

int

返回表单中的行数。

另见

count()

rowWrapPolicy()#
返回类型::

行包装策略

getter 属性 rowWrapPolicyᅟ

setFieldGrowthPolicy(policy)#
参数:

策略FieldGrowthPolicy

setter 属性 fieldGrowthPolicyᅟ

setFormAlignment(alignment)#
参数:

位置AlignmentFlag 的组合

setter 属性 formAlignmentᅟ

setHorizontalSpacing(spacing)#
参数:

间隔 – int

setter 属性 horizontalSpacingᅟ

setItem(row, role, item)#
参数:

设置给定 row 和给定 role 的项为 item,如果需要,通过添加空行扩展布局。

如果单元格已被占用,则不插入 item,并将错误消息发送到控制台。该 item 涵盖了两个列。

警告

不要使用此函数来添加子布局或子小部件项。使用 setLayout()setWidget() 代替。

另见

setLayout()

setLabelAlignment(alignment)#
参数:

位置AlignmentFlag 的组合

属性 labelAlignment 的设置器。

setLayout(row, role, layout)#
参数:

设置给定 row 上的子布局,给定 role 的到 layout,如果需要,则扩展表单布局以包含空行。

如果单元格已被占用,则不会插入 layout,并将错误消息发送到控制台。

注意

对于大多数应用,应使用 addRow()insertRow() 而不是 setLayout()。

另见

setWidget()

setRowVisible(layout, on)#
参数:

这是一个重载函数。

如果 on 为真,则显示与 layout 对应的行,否则隐藏该行。

setRowVisible(widget, on)
参数:

这是一个重载函数。

如果 on 为真,则显示与 widget 对应的行,否则隐藏该行。

setRowVisible(row, on)
参数:
  • row – int

  • on – bool

如果 on 为真,则显示 row 行,否则隐藏该行。

row 必须是非负数且小于 rowCount()

setRowWrapPolicy(policy)#
参数:

policyRowWrapPolicy

设置 rowWrapPolicyᅟ 属性的值。

setVerticalSpacing(spacing)#
参数:

间隔 – int

设置 verticalSpacingᅟ 属性的值。

setWidget(row, role, widget)#
参数:

为给定 rowrolewidget 设置小部件,并在必要时扩展布局以添加空行。

如果单元格已占用,则不插入 widget,并将在控制台发送错误消息。

注意

对于大多数应用,应使用 addRow()insertRow() 替代 setWidget()。

另见

setLayout()

takeRow(layout)#
参数:

layoutQLayout

返回类型::

TakeRowResult

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

这是一个重载函数。

从表布局中删除指定的 layout

注意

此函数不会删除任何内容。

在此调用之后,rowCount() 将减一。所有后续行将向上移动一行,释放的垂直空间将重新分配到剩余行中。

flay = ...
vbl = QVBoxLayout()
flay.insertRow(2, "User:", vbl)
# later:
QFormLayout.TakeRowResult result = flay.takeRow(widget)

如果您想从表布局移除行并删除插入的布局,请使用 removeRow() 代替。

返回包含小部件和相应标签布局项的结构

另见

removeRow()

takeRow(widget)
参数:

widgetQWidget

返回类型::

TakeRowResult

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

这是一个重载函数。

从该表布局删除指定的 widget

注意

此函数不会删除任何内容。

在此调用之后,rowCount() 将减一。所有后续行将向上移动一行,释放的垂直空间将重新分配到剩余行中。

flay = ...
le = QLineEdit()
flay.insertRow(2, "User:", le)
# later:
QFormLayout.TakeRowResult result = flay.takeRow(widget)

如果您想从布局中删除行并删除小部件,请使用 removeRow() 代替。

返回包含小部件和相应标签布局项的结构

另见

removeRow()

takeRow(row)
参数:

row – int

返回类型::

TakeRowResult

警告

本节包含自动从C++翻译到Python的片段,可能包含错误。

从当前表布局中删除指定的 row

row 必须是非负数且小于 rowCount()

注意

此函数不会删除任何内容。

在此调用之后,rowCount() 将减一。所有后续行将向上移动一行,释放的垂直空间将重新分配到剩余行中。

您可以使用此函数来撤销之前的 addRow()insertRow()

flay = ...
le = QLineEdit()
flay.insertRow(2, "User:", le)
# later:
QFormLayout.TakeRowResult result = flay.takeRow(2)

如果您想从布局中删除行并删除小部件,请使用 removeRow() 代替。

返回包含小部件和相应标签布局项的结构

另见

removeRow()

verticalSpacing()#
返回类型::

int

获取属性 verticalSpacing 的值。