python pyside2 GridLayout布局

介绍

QGridLayout 是 PySide2 中非常实用的网格布局管理器,它能让你像在表格中一样精确地排列界面元素。

作用

QGridLayout 通过行号和列号(均从 0 开始)来定位控件,支持控件跨多行多列,还能设置行列的拉伸策略,适应窗口大小变化。

例子

import sys
from PySide2.QtWidgets import (QApplication, QWidget, QGridLayout, 
                               QPushButton, QLabel, QLineEdit, QTextEdit)

class AdvancedGridLayout(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建网格布局
        grid = QGridLayout()
        # 设置控件之间的间距(水平和垂直)
        grid.setSpacing(10)

        # 添加标题(跨4列)
        title = QLabel("用户信息表单")
        title.setStyleSheet("font-size: 16px; font-weight: bold;")
        grid.addWidget(title, 0, 0, 1, 4)  # 行0,列0,跨1行4列

        # 第一行控件
        name_label = QLabel("姓名:")
        grid.addWidget(name_label, 1, 0)

        name_edit = QLineEdit()
        grid.addWidget(name_edit, 1, 1, 1, 3)  # 跨1行3列

        # 第二行控件
        age_label = QLabel("年龄:")
        grid.addWidget(age_label, 2, 0)

        age_edit = QLineEdit()
        grid.addWidget(age_edit, 2, 1)

        gender_label = QLabel("性别:")
        grid.addWidget(gender_label, 2, 2)

        gender_edit = QLineEdit()
        grid.addWidget(gender_edit, 2, 3)

        # 第三行:备注(跨2行)
        note_label = QLabel("备注:")
        grid.addWidget(note_label, 3, 0)

        note_edit = QTextEdit()
        grid.addWidget(note_edit, 3, 1, 2, 3)  # 行3,列1,跨2行3列

        # 按钮区域
        ok_btn = QPushButton("确定")
        grid.addWidget(ok_btn, 5, 2)

        cancel_btn = QPushButton("取消")
        grid.addWidget(cancel_btn, 5, 3)

        # 设置行列伸缩因子(窗口大小变化时的拉伸比例)
        grid.setColumnStretch(1, 2)  # 第1列拉伸比例为2
        grid.setColumnStretch(3, 1)  # 第3列拉伸比例为1
        grid.setRowStretch(3, 1)     # 第3行拉伸比例为1

        # 应用布局
        self.setLayout(grid)

        # 窗口设置
        self.setWindowTitle('高级 GridLayout 示例')
        self.setGeometry(300, 300, 500, 300)  # 位置(x,y)和大小(w,h)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = AdvancedGridLayout()
    sys.exit(app.exec_())

代码解释

布局创建

QGridLayout() 初始化网格布局,setSpacing(10) 设置控件间距为10像素。

添加控件

  • addWidget(widget, row, col):基本用法,将控件放在指定行列

  • addWidget(widget, row, col, row_span, col_span):扩展用法,设置控件跨越的行数和列数(如标题跨4列,备注框跨2行3列)

伸缩控制

  • setColumnStretch(col, factor):设置列的拉伸因子,数值越大,窗口缩放时该列占比越大
  • setRowStretch(row, factor):设置行的拉伸因子,类似列的设置

窗口适配

通过伸缩因子的设置,当用户调整窗口大小时,界面元素会按比例自动调整,保持良好的布局效果。


原文出处:/show_1GW1rWF8OYbb.html