Python GUI编程网 > PyQt5常用控件属性和方法学习 > 布局管理器-表单布局QFormLayout
python教程

布局管理器-表单布局QFormLayout

发布日期:2021年2月26日 08:59
阅读:2346
作者:Python GUI编程网

布局管理器-表单布局QFormLayout

00:00 / 01:23
1x
2x
1.5x
1.25x
1x
0.8x
0.5x

布局管理器-表单布局QFormLayout

################################
# PyQt5中文网 - PyQt5全套视频教程 #
#    https://www.PyQt5.cn/     #
#         主讲: 村长            #
################################

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("布局管理器-表单布局QFormLayout - PyQt5中文网")
        self.resize(600, 500)
        self.func_list()

    def func_list(self):
        self.func()

    def func(self):
        name_label = QLabel('姓名:')
        age_label = QLabel('年龄:')
        tel_label = QLabel('号码:')

        name_line = QLineEdit()
        age_line = QSpinBox()
        tel_line = QLineEdit()

        sub_btn = QPushButton('提交')

        man_btn = QRadioButton('男')
        woman_btn = QRadioButton('女')
        check_btn = QFormLayout()
        check_btn.addRow(man_btn, woman_btn)

        # 1.创建布局管理器
        form = QFormLayout()

        # 2.行操作
        # 1.1.添加行
        # form.addWidget(name_label)
        # form.addWidget(name_line)
        # form.addRow(name_label, name_line)
        form.addRow(name_label, name_line)  # 字符串被自动解释为标签控件
        form.addRow('性别:', check_btn)
        form.addRow(tel_label, tel_line)
        form.addRow(sub_btn)

        # 1.2.插入行(和上面的添加行一样,仅多一个位置整形数字)
        # form.insertRow(2, sub_btn)  # int超出范围后直接加在最后

        # 1.3.移除行
        # form.removeRow(tel_label)  # 删除子控件,同时删除整行
        # form.takeRow(2)  # 不删除子控件
        ''''''
        # 1.4.修改行(一行中两个角色的分别控制)
        # QFormLayout.LabelRole  # 标签角色
        # QFormLayout.FieldRole  # 输入框角色
        # QFormLayout.SpanningRole  # 整体行(包括输入框和标签)
        form.setWidget(0, QFormLayout.LabelRole, tel_label)  # 如果0位置已经有控件,修改不会成功
        form.setWidget(0, QFormLayout.FieldRole, tel_line)
        # form.setLayout(1, QFormLayout.FieldRole, check_btn)

        # 1.5.获取行信息
        print(form.rowCount())
        # print(form.getWidgetPosition(name_line))
        print(form.getLayoutPosition(check_btn))

        # 1.6.标签操作
        form.labelForField(name_label.setText('name'*8))

        # 1.7.包装策略
        # QFormLayout.DontWrapRows  # 字段一直在标签旁边
        # QFormLayout.WrapLongRows  # 标签文本过长,字段自动换行
        # QFormLayout.WrapAllRows  # 字段一直位于标签下方
        form.setRowWrapPolicy(QFormLayout.WrapLongRows)

        # 1.8.对齐和间距
        form.setFormAlignment(Qt.AlignRight | Qt.AlignBottom)  # 表单对齐
        form.setLabelAlignment(Qt.AlignRight)  # 标签对齐
        form.setHorizontalSpacing(30)
        form.setVerticalSpacing(30)

        # 1.9.字段增长策略
        # QFormLayout.FieldsStayAtSizeHint  # 字段宽度不变
        # QFormLayout.ExpandingFieldsGrow  # 字段宽度自适应变化
        # QFormLayout.AllNonFixedFieldsGrow  # 用的不多
        form.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)

        # 2.为父控件添加布局管理器
        self.setLayout(form)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())