- class QFormLayout#
QFormLayout
类管理输入小部件及其关联的标签表单。 更多…概述#
属性#
fieldGrowthPolicyᅟ
- 表单字段增长的方式formAlignmentᅟ
- 表单布局内容在布局几何形状中的对齐方式horizontalSpacingᅟ
- 水平放置的控件之间的间隔labelAlignmentᅟ
- 标签的水平对齐方式rowWrapPolicyᅟ
- 表单行换行的方式verticalSpacingᅟ
- 垂直放置的控件之间的间隔
方法#
def
__init__()
def
addRow()
定义
insertRow()
定义
itemAt()
定义
removeRow()
定义
rowCount()
定义
setItem()
定义
setLayout()
定义
setWidget()
定义
takeRow()
注意
此文档可能包含自动从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样式
传统的样式用于Windows、GNOME以及较早版本的KDE。标签左对齐,扩展字段增长以填充可用空间。(这通常对应于我们使用两列网格布局得到的结果。
基于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
具有水平大小策略为扩展或最小扩展的字段将增长以填充可用空间。其他字段不会超出其有效大小提示。这是Plastique的默认策略。
QFormLayout.AllNonFixedFieldsGrow
所有允许增长的大小策略的字段将增长以填充可用空间。这是大多数样式的默认策略。
- class RowWrapPolicy#
该枚举指定了可以通过控制表格行折绕方式的策略。
常量
描述
QFormLayout.DontWrapRows
字段始终与其标签一起布局。除了Qt Extended样式之外,这是所有样式的默认策略。
QFormLayout.WrapLongRows
标签分配足够的水平空间以适应最宽的标签,其余空间分配给字段。如果字段对的最小宽度大于可用空间,该字段将折绕到下一行。这是Qt Extended样式的默认策略。
QFormLayout.WrapAllRows
字段始终在标签下方布局。
- 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。
- 属性 rowWrapPolicy: QFormLayout.RowWrapPolicy#
此属性存储了表格行换行的方式。
默认值取决于小部件或应用程序的样式。对于Qt Extended样式,默认为
WrapLongRows
;对于其他样式,默认为DontWrapRows
。如果您想在标签的上方显示每个字段(而不是旁边),将此属性设置为
WrapAllRows
。- 属性 verticalSpacing: int#
此属性存储了垂直排列的部件之间的间距。
默认情况下,如果没有显式设置值,布局的垂直间距将继承自父布局或父小部件的样式设置。
使用给定的
parent
小部件构造一个新的表单布局。该布局直接设置为您父小部件的最顶级布局。一个部件只能有一个顶级布局。它由
layout()
返回。另见
这是一个重载函数。
将指定的
layout
添加到此表单布局的末尾。该layout
涵盖两个列。- addRow(labelText, field)
- 参数:
labelText – 字符串
field –
QWidget
这是一个重载函数。
这个重载函数在后台自动创建一个带有
labelText
文本的QLabel
。将field
设置为新的QLabel
的buddy
。- addRow(labelText, field)
- 参数:
labelText – 字符串
field –
QLayout
这是一个重载函数。
这个重载函数在后台自动创建一个带有
labelText
文本的QLabel
。在此表单布局底部添加一行,包含给定的
label
和field
。另见
这是一个重载函数。
- addRow(widget)
- 参数:
widget –
QWidget
这是一个重载函数。
将指定的
widget
添加到此表单布局的末尾。该widget
横跨两列。- fieldGrowthPolicy()#
- 返回类型::
属性
fieldGrowthPolicyᅟ
的获取器。- formAlignment()#
- 返回类型::
AlignmentFlag
的组合
属性
formAlignmentᅟ
的获取器。- getItemPosition(index)#
- 参数:
index – int
- 返回类型::
PyObject
检索指定
index
的项的行和角色(列)。如果index
超出范围,则将 *``rowPtr`` 设置为 -1;否则,将行存储在 *``rowPtr`` 中,并将角色存储在 *``rolePtr`` 中。另见
检索指定子
layout
的行和角色(列)。如果layout
不在表单布局中,则将 *``rowPtr`` 设置为 -1;否则,行存储在 *``rowPtr`` 中,角色存储在 *``rolePtr`` 中。获取布局中指定
widget
的行和角色(列)。如果widget
不在布局中,则 *``rowPtr`` 被设置为 -1;否则,行存储在 *``rowPtr`` 中,角色存储在 *``rolePtr`` 中。- horizontalSpacing()#
- 返回类型::
int
属性
horizontalSpacing
的获取器。这是一个重载函数。
- insertRow(row, labelText, field)
- 参数:
row – int
labelText – 字符串
field –
QWidget
这是一个重载函数。
这个重载函数在后台自动创建一个带有
labelText
文本的QLabel
。将field
设置为新的QLabel
的buddy
。- insertRow(row, labelText, field)
- 参数:
row – int
labelText – 字符串
field –
QLayout
这是一个重载函数。
这个重载函数在后台自动创建一个带有
labelText
文本的QLabel
。- insertRow(row, widget)
- 参数:
row – int
widget –
QWidget
这是一个重载函数。
在表单布局中将指定
widget
插入到位置row
。该widget
占据两个列。如果row
超出范围,则widget
被添加到最后。在表单布局中的位置
row
插入一个新的行,并带有指定的label
和field
。如果row
超出范围,则新行被添加到最后。另见
- insertRow(row, layout)
- 参数:
row – int
layout –
QLayout
这是一个重载函数。
在表单布局中将指定的
layout
插入到位置row
。该layout
占据两个列。如果row
超出范围,则该部件被添加到最后。这是一个重载函数。
如果对应于
layout
的行中的一些元素可见,则返回 true,否则返回 false。- isRowVisible(widget)
- 参数:
widget –
QWidget
- 返回类型::
bool
这是一个重载函数。
如果对应于
widget
的行中的一些元素可见,则返回 true,否则返回 false。- isRowVisible(row)
- 参数:
row – int
- 返回类型::
bool
如果行
row
中有可见项目,则返回 true,否则返回 false。返回给定
row
中指定role
(列)的布局项。如果没有这样的项,则返回None
。- labelAlignment()#
- 返回类型::
AlignmentFlag
的组合
属性
labelAlignment
的获取器。返回与给定
field
关联的标签。另见
这是一个重载函数。
警告
本节包含自动从C++翻译到Python的片段,可能包含错误。
这是一个重载函数。
从此表单布局中删除与
layout
相关的行。在此调用后,
rowCount()
将减一。所有占用此行的小部件和嵌套布局都将被删除。这包括字段小部件以及任何标签。所有后续行都将上移一行,释放的垂直空间将重新分配给剩余行。您可以使用此函数来撤销之前的
addRow()
或insertRow()
。flay = ... vbl = QVBoxLayout() flay.insertRow(2, "User:", vbl) # later: flay.removeRow(layout) # vbl == None at this point
如果您想在不清除插入布局的情况下从表单布局中删除行,请使用
takeRow()
。另见
- removeRow(widget)
- 参数:
widget –
QWidget
警告
本节包含自动从C++翻译到Python的片段,可能包含错误。
这是一个重载函数。
从此表单布局中删除与
widget
相关的行。在此调用后,
rowCount()
将减一。所有占用此行的小部件和嵌套布局都将被删除。这包括字段小部件以及任何标签。所有后续行都将上移一行,释放的垂直空间将重新分配给剩余行。您可以使用此函数来撤销之前的
addRow()
或insertRow()
。flay = ... le = QLineEdit() flay.insertRow(2, "User:", le) # later: flay.removeRow(le) # le == None at this point
如果您想在保留小部件的情况下从布局中删除行,请使用
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()
替代。另见
- rowCount()#
- 返回类型::
int
返回表单中的行数。
另见
getter 属性
rowWrapPolicyᅟ
。- setFieldGrowthPolicy(policy)#
- 参数:
策略 –
FieldGrowthPolicy
setter 属性
fieldGrowthPolicyᅟ
。- setFormAlignment(alignment)#
- 参数:
位置 –
AlignmentFlag
的组合
setter 属性
formAlignmentᅟ
。- setHorizontalSpacing(spacing)#
- 参数:
间隔 – int
setter 属性
horizontalSpacingᅟ
。- setItem(row, role, item)#
- 参数:
row – int
role –
ItemRole
项目 –
QLayoutItem
设置给定
row
和给定role
的项为item
,如果需要,通过添加空行扩展布局。如果单元格已被占用,则不插入
item
,并将错误消息发送到控制台。该item
涵盖了两个列。- setLabelAlignment(alignment)#
- 参数:
位置 –
AlignmentFlag
的组合
属性
labelAlignment
的设置器。设置给定
row
上的子布局,给定role
的到layout
,如果需要,则扩展表单布局以包含空行。如果单元格已被占用,则不会插入
layout
,并将错误消息发送到控制台。这是一个重载函数。
如果
on
为真,则显示与layout
对应的行,否则隐藏该行。- setRowVisible(widget, on)
- 参数:
widget –
QWidget
on – bool
这是一个重载函数。
如果
on
为真,则显示与widget
对应的行,否则隐藏该行。- setRowVisible(row, on)
- 参数:
row – int
on – bool
如果
on
为真,则显示row
行,否则隐藏该行。row
必须是非负数且小于rowCount()
。- setRowWrapPolicy(policy)#
- 参数:
policy –
RowWrapPolicy
设置
rowWrapPolicyᅟ
属性的值。- setVerticalSpacing(spacing)#
- 参数:
间隔 – int
设置
verticalSpacingᅟ
属性的值。为给定
row
和role
的widget
设置小部件,并在必要时扩展布局以添加空行。如果单元格已占用,则不插入
widget
,并将在控制台发送错误消息。警告
本节包含自动从C++翻译到Python的片段,可能包含错误。
这是一个重载函数。
从表布局中删除指定的
layout
。注意
此函数不会删除任何内容。
在此调用之后,
rowCount()
将减一。所有后续行将向上移动一行,释放的垂直空间将重新分配到剩余行中。flay = ... vbl = QVBoxLayout() flay.insertRow(2, "User:", vbl) # later: QFormLayout.TakeRowResult result = flay.takeRow(widget)
如果您想从表布局移除行并删除插入的布局,请使用
removeRow()
代替。返回包含小部件和相应标签布局项的结构
另见
- takeRow(widget)
- 参数:
widget –
QWidget
- 返回类型::
TakeRowResult
警告
本节包含自动从C++翻译到Python的片段,可能包含错误。
这是一个重载函数。
从该表布局删除指定的
widget
。注意
此函数不会删除任何内容。
在此调用之后,
rowCount()
将减一。所有后续行将向上移动一行,释放的垂直空间将重新分配到剩余行中。flay = ... le = QLineEdit() flay.insertRow(2, "User:", le) # later: QFormLayout.TakeRowResult result = flay.takeRow(widget)
如果您想从布局中删除行并删除小部件,请使用
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()
代替。返回包含小部件和相应标签布局项的结构
另见
- verticalSpacing()#
- 返回类型::
int
获取属性
verticalSpacing
的值。