PySide6.QtWidgets.QFormLayout

class QFormLayout

QFormLayout 类管理输入小部件及其相关标签的表单。More_

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

  • Convenient API for creating label–field pairs.

    The addRow() overload that takes a QString and a QWidget * creates a QLabel behind the scenes and automatically set up its buddy. We can then write code like this:

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

    Compare this with the following code, written using 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 扩展样式

qformlayout-qpe4

qformlayout-qpe4

qformlayout-qpe4

qformlayout-qpe4

传统风格用于Windows、GNOME和早期版本的KDE。标签左对齐,扩展字段会增长以填充可用空间。(这通常对应于我们使用两列QGridLayout时会得到的结果。)

基于macOS Aqua指南的风格。标签右对齐,字段不会超过其大小提示,表单水平居中。

推荐用于KDE应用程序的风格。类似于MacStyle,不同之处在于表单左对齐,所有字段都会增长以填充可用空间。

Qt Extended风格的默认风格。标签右对齐,扩展字段会增长以填充可用空间,并且对于长行启用了行换行。

表单样式也可以通过调用 setLabelAlignment()setFormAlignment()setFieldGrowthPolicy()setRowWrapPolicy() 来单独覆盖。例如,为了在所有平台上模拟 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

具有水平size policyExpandingMinimumExpanding的字段将增长以填充可用空间。其他字段不会增长超过其有效大小提示。这是Plastique的默认策略。

QFormLayout.AllNonFixedFieldsGrow

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

另请参阅

fieldGrowthPolicy

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进行分配。

Access functions:
property formAlignmentᅟ: Combination of Qt.AlignmentFlag

此属性保存表单布局内容在布局几何中的对齐方式。

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

Access functions:
property horizontalSpacingᅟ: int

此属性保存并排布局的小部件之间的间距。

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

Access functions:
property labelAlignmentᅟ: Combination of Qt.AlignmentFlag

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

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

另请参阅

formAlignment

Access functions:
property rowWrapPolicyᅟ: QFormLayout.RowWrapPolicy

此属性决定了表单行的换行方式。

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

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

另请参阅

fieldGrowthPolicy

Access functions:
property verticalSpacingᅟ: int

此属性保存垂直布局的小部件之间的间距。

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

Access functions:
__init__([parent=None])
Parameters:

父级QWidget

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

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

另请参阅

setLayout()

addRow(layout)
Parameters:

布局QLayout

这是一个重载函数。

在此表单布局的末尾添加指定的layout。该layout跨越两列。

addRow(widget)
Parameters:

widgetQWidget

这是一个重载函数。

在此表单布局的末尾添加指定的widgetwidget跨越两列。

addRow(label, field)
Parameters:

这是一个重载函数。

addRow(label, field)
Parameters:

在此表单布局的底部添加一个新行,使用给定的labelfield

另请参阅

insertRow()

addRow(labelText, field)
Parameters:
  • labelText – str

  • fieldQLayout

这是一个重载函数。

此重载会自动在后台创建一个带有labelText作为其文本的QLabel

addRow(labelText, field)
Parameters:
  • labelText – str

  • fieldQWidget

这是一个重载函数。

此重载会自动在后台创建一个带有labelText作为其文本的QLabel。将field设置为新QLabelbuddy

fieldGrowthPolicy()
Return type:

FieldGrowthPolicy

另请参阅

setFieldGrowthPolicy()

属性 fieldGrowthPolicyᅟ 的获取器。

formAlignment()
Return type:

AlignmentFlag 的组合

另请参阅

setFormAlignment()

属性 formAlignmentᅟ 的获取器。

getItemPosition(index)
Parameters:

索引 – int

Return type:

PyObject

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

getLayoutPosition(layout)
Parameters:

布局QLayout

Return type:

PyTuple

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

getWidgetPosition(widget)
Parameters:

widgetQWidget

Return type:

PyObject

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

horizontalSpacing()
Return type:

整数

另请参阅

setHorizontalSpacing()

属性 horizontalSpacingᅟ 的获取器。

insertRow(row, layout)
Parameters:

这是一个重载函数。

在此表单布局的row位置插入指定的layoutlayout跨越两列。如果row超出范围,则小部件将添加在末尾。

insertRow(row, widget)
Parameters:

这是一个重载函数。

在此表单布局的row位置插入指定的widgetwidget将跨越两列。如果row超出范围,则小部件将添加在末尾。

insertRow(row, label, field)
Parameters:

这是一个重载函数。

insertRow(row, label, field)
Parameters:

在此表单布局中的位置 row 插入一个新行,使用给定的 labelfield。如果 row 超出范围,新行将添加在末尾。

另请参阅

addRow()

insertRow(row, labelText, field)
Parameters:
  • row – int

  • labelText – str

  • fieldQLayout

这是一个重载函数。

此重载会自动在后台创建一个带有labelText作为其文本的QLabel

insertRow(row, labelText, field)
Parameters:
  • row – int

  • labelText – str

  • fieldQWidget

这是一个重载函数。

此重载会自动在后台创建一个带有labelText作为其文本的QLabel。将field设置为新QLabelbuddy

isRowVisible(layout)
Parameters:

布局QLayout

Return type:

布尔

这是一个重载函数。

如果与layout对应的行中的某些项目可见,则返回true,否则返回false。

isRowVisible(widget)
Parameters:

widgetQWidget

Return type:

布尔

这是一个重载函数。

如果与widget对应的行中的某些项目可见,则返回true,否则返回false。

isRowVisible(row)
Parameters:

– 整数

Return type:

布尔

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

itemAt(row, role)
Parameters:
Return type:

QLayoutItem

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

另请参阅

itemAt() setItem()

labelAlignment()
Return type:

AlignmentFlag 的组合

另请参阅

setLabelAlignment()

属性 labelAlignmentᅟ 的获取器。

labelForField(field)
Parameters:

字段QLayout

Return type:

QWidget

这是一个重载函数。

labelForField(field)
Parameters:

字段QWidget

Return type:

QWidget

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

另请参阅

itemAt()

removeRow(layout)
Parameters:

布局QLayout

警告

本节包含从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)
Parameters:

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)
Parameters:

– 整数

警告

本节包含从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()
Return type:

整数

返回表单中的行数。

另请参阅

count()

rowWrapPolicy()
Return type:

RowWrapPolicy

另请参阅

setRowWrapPolicy()

属性 rowWrapPolicyᅟ 的获取器。

setFieldGrowthPolicy(policy)
Parameters:

策略FieldGrowthPolicy

另请参阅

fieldGrowthPolicy()

属性 fieldGrowthPolicyᅟ 的设置器。

setFormAlignment(alignment)
Parameters:

alignmentAlignmentFlag 的组合

另请参阅

formAlignment()

属性 formAlignmentᅟ 的设置器。

setHorizontalSpacing(spacing)
Parameters:

间距 – int

另请参阅

horizontalSpacing()

属性 horizontalSpacingᅟ 的设置器。

setItem(row, role, item)
Parameters:

将给定row中的项目设置为给定roleitem,必要时用空行扩展布局。

如果单元格已经被占用,item不会被插入,并且会向控制台发送一条错误消息。item跨越两列。

警告

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

另请参阅

setLayout()

setLabelAlignment(alignment)
Parameters:

alignmentAlignmentFlag 的组合

另请参阅

labelAlignment()

属性 labelAlignmentᅟ 的设置器。

setLayout(row, role, layout)
Parameters:

将给定row中的子布局设置为给定rolelayout,必要时用空行扩展表单布局。

如果单元格已被占用,layout 不会被插入,并且会向控制台发送一条错误消息。

注意

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

另请参阅

setWidget()

setRowVisible(layout, on)
Parameters:
  • 布局QLayout

  • on – 布尔值

这是一个重载函数。

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

另请参阅

removeRow() takeRow()

setRowVisible(widget, on)
Parameters:
  • widgetQWidget

  • on – 布尔值

这是一个重载函数。

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

另请参阅

removeRow() takeRow()

setRowVisible(row, on)
Parameters:
  • row – int

  • on – 布尔值

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

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

setRowWrapPolicy(policy)
Parameters:

策略RowWrapPolicy

另请参阅

rowWrapPolicy()

属性 rowWrapPolicyᅟ 的设置器。

setVerticalSpacing(spacing)
Parameters:

间距 – int

另请参阅

verticalSpacing()

属性 verticalSpacingᅟ 的设置器。

setWidget(row, role, widget)
Parameters:

将给定row中的小部件设置为给定rolewidget,必要时用空行扩展布局。

如果单元格已被占用,widget不会被插入,并且会向控制台发送一条错误消息。

注意

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

另请参阅

setLayout()

takeRow(layout)
Parameters:

布局QLayout

Return type:

TakeRowResult

警告

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

这是一个重载函数。

从该表单布局中移除指定的 layout

注意

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

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

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

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

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

另请参阅

removeRow()

takeRow(widget)
Parameters:

widgetQWidget

Return type:

TakeRowResult

警告

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

这是一个重载函数。

从该表单布局中移除指定的 widget

注意

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

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

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

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

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

另请参阅

removeRow()

takeRow(row)
Parameters:

– 整数

Return type:

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()
Return type:

整数

另请参阅

setVerticalSpacing()

属性 verticalSpacingᅟ 的获取器。

class TakeRowResult

注意

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

详细描述

PySide6.QtWidgets.QFormLayout.TakeRowResult.labelItem
PySide6.QtWidgets.QFormLayout.TakeRowResult.fieldItem