QFormLayout是一个非常方便的布局类,以两列的形式布局其子项。左列一般由便签组成,右列由“字段”小部件(比如单行文本框QLineEdit,QSpinBox等)组成。
QGridLayout也可以实现同样效果的两列布局,而QFormLayout是更高级的替代方案,有如下几方面的有点:
1、遵守不同平台的外观和感觉准则:
例如,macOs 和Linux KDE中的标签通常是使用右对齐,而Window和Linux GNOME中的应用程序通常使用左对齐。
2、支持包装长行:
对于显示器为小屏的设备,QFormLayout可以设置为包括包裹长行,设置包裹所有行。
3、快速创建标签字段:
使用addRow(self,labelText:str,field:QWidget)会在后台根据labelText内容(字符串)创建QLabel实例(标签),并且自动设置和QWidget实例的伙伴关系。
可以通过调用setLabelAlignment()、setFormAlignment()、setFieldGrowthPolicy和setRowWrapPolicy()来覆盖表单样式。例如通过设置几个函数设置,程序运行在不同平台显示一致的外观。
# -*- coding: utf-8 -*-
"""
文件名字:Pyside6_FormLayoutDemo
作者姓名:诚外无物
创建日期:2023/11/14
项目名称:chapter01
"""
import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import Qt
class FormLayoutDemo(QWidget):
def __init__(self, parent=None):
super(FormLayoutDemo, self).__init__(parent)
self.setWindowTitle("QFormLayout布局管理例子")
self.resize(400, 100)
# 创建QFormLayout布局实例
formLayout = QFormLayout()
# 创建3个输入类控件
nameLineEdit = QLineEdit()
emailLineEdit = QLineEdit()
ageSpinBox = QSpinBox()
# 把3个输入类小控件添加到QFormLayout布局对象中
# QFormLayout布局对象addRow()方法,根据传入的字符串参数自动创建了3个QLabel便签实例
formLayout.addRow("&Name:", nameLineEdit)
formLayout.addRow("&Email:", emailLineEdit)
formLayout.addRow("&Age:", ageSpinBox)
# 模拟macStyle表单布局外观,但使用左对齐的标签
formLayout.setRowWrapPolicy(QFormLayout.DontWrapRows)
formLayout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)
formLayout.setFormAlignment(Qt.AlignHCenter | Qt.AlignTop)
formLayout.setLabelAlignment(Qt.AlignLeft)
# 增加空白
formLayout.addItem(QSpacerItem(30,30))
# 添加两个按钮对象(一行两列,和上面的布局对应)
formLayout.addRow(QPushButton('确认'),QPushButton('取消'))
self.setLayout(formLayout)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = FormLayoutDemo()
form.show()
sys.exit(app.exec())
以上代码运行后,显示如下: