1. 程式人生 > 其它 >10.3 QFormLayout表單佈局管理器

10.3 QFormLayout表單佈局管理器

一、QFormLayout表單佈局管理器

1.基本概念

  • QFormLayout表單佈局管理器類似於一個表格,操作方法也和我們之前學習過的游標插入和操作表格相似,比如插入行或列,對齊等功能
點選檢視程式碼
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('號碼:')
        sex_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.行操作
        # 2.1.新增行
        ## form.addWidget(name_label)  #新增控制元件
        ## form.addWidget(name_line)
        form.addRow(name_label, name_line)  # 字串被自動解釋為標籤控制元件
        form.addRow(age_label,age_line)
        form.addRow(sex_label, check_btn)
        form.addRow(tel_label, tel_line)
        form.addRow(sub_btn)
        #
        # # 2.2.插入行(和上面的新增行一樣,僅多一個位置整形數字)
        # form.insertRow(2, sub_btn)  # int超出範圍後直接加在最後

        # # 2.3.移除行
        # form.removeRow(tel_label)  # 刪除子控制元件,同時刪除整行
        # form.takeRow(2)  # 不刪除子控制元件,相當於隱藏了
        '''
        # # 2.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)
        #
        # # 2.5.獲取行資訊
        # print(form.rowCount())
        # # print(form.getWidgetPosition(name_line))
        # print(form.getLayoutPosition(check_btn))
        #
        # # 2.6.標籤操作
        # form.labelForField(name_label.setText('name' * 8)) #修改標籤的名字
        #
        '''
        # # 2.7.包裝策略
        # # QFormLayout.DontWrapRows  # 欄位一直在標籤旁邊
        # # QFormLayout.WrapLongRows  # 標籤文字過長,欄位自動換行
        # # QFormLayout.WrapAllRows  # 欄位一直位於標籤下方
        '''
        form.setRowWrapPolicy(QFormLayout.DontWrapRows)

        # # 2.8.對齊和間距
        # form.setFormAlignment(Qt.AlignRight | Qt.AlignBottom)  # 表單對齊 右對齊 下對齊
        # form.setLabelAlignment(Qt.AlignRight)  # 標籤對齊
        # form.setHorizontalSpacing(30)
        # form.setVerticalSpacing(30)
        '''
        # # 2.9.欄位增長策略
        # # QFormLayout.FieldsStayAtSizeHint  # 欄位寬度不變
        # # QFormLayout.ExpandingFieldsGrow  # 欄位寬度自適應變化
        # # QFormLayout.AllNonFixedFieldsGrow  # 用的不多
        '''
        form.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)#欄位寬度不變

        # 3.為父控制元件添加布局管理器(新增該命令才能顯示)
        self.setLayout(form)


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

    window.show()
    sys.exit(app.exec_())
## 2.程式碼

3.效果