python pyside2 Horizontal Layout布局(QHBoxLayout)

介绍

QHBoxLayout 是 PySide2 中用于水平排列控件的布局管理器,它能让控件在水平方向上依次排列,并自动适应窗口大小变化。以下是其详细使用说明和示例:

功能

  • 水平方向排列控件(从左到右)
  • 支持添加伸缩项(addStretch)控制控件间距和对齐
  • 可设置控件间距、边距
  • 自动响应窗口大小变化

使用场景

  • 工具栏、按钮组等水平排列的控件
  • 表单中的行元素(如标签+输入框+按钮)
  • 需要控制水平对齐的界面元素

通过灵活使用伸缩项和对齐方式,QHBoxLayout 可以实现各种水平方向的布局效果,是构建简洁界面的常用工具。

例子

import sys
from PySide2.QtWidgets import (QApplication, QWidget, QHBoxLayout, 
                               QPushButton, QLabel, QLineEdit)
from PySide2.QtCore import Qt

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

    def initUI(self):
        # 1. 创建水平布局
        hbox = QHBoxLayout()

        # 2. 设置布局属性
        hbox.setSpacing(10)  # 控件之间的间距(像素)
        hbox.setContentsMargins(20, 20, 20, 20)  # 布局边缘边距(上,右,下,左)

        # 3. 添加控件
        label = QLabel("用户名:")
        hbox.addWidget(label)

        edit = QLineEdit()
        hbox.addWidget(edit)

        # 4. 添加伸缩项(关键功能)
        # 伸缩项会占据可用空间,推动其他控件
        hbox.addStretch(1)  # 参数为伸缩因子,多个伸缩项按比例分配空间

        # 5. 添加更多控件
        btn1 = QPushButton("确定")
        hbox.addWidget(btn1)

        btn2 = QPushButton("取消")
        hbox.addWidget(btn2)

        # 6. 应用布局到窗口
        self.setLayout(hbox)

        # 窗口设置
        self.setWindowTitle('QHBoxLayout 使用指南')
        self.setGeometry(300, 300, 600, 100)
        self.show()

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

关键方法解析

  1. 创建布局

    hbox = QHBoxLayout()
    self.setLayout(hbox)  # 应用到窗口
    
  2. 添加控件

    • addWidget(widget):按顺序添加控件
    • addWidget(widget, stretch, alignment):指定伸缩因子和对齐方式
      hbox.addWidget(btn, 0, Qt.AlignRight)  # 控件靠右对齐
      
  3. 伸缩项控制

    • addStretch(stretch):添加伸缩空间,用于控制控件位置
      • 单个伸缩项:hbox.addStretch(1) 可将后续控件推到右侧
      • 多个伸缩项:按比例分配空间(如 addStretch(1) 和 addStretch(2) 会按1:2分配)
  4. 布局间距设置

    • setSpacing(int):设置控件之间的间距
    • setContentsMargins(left, top, right, bottom):设置布局与父窗口的边距
  5. 嵌套布局
    可以在 QHBoxLayout 中嵌套其他布局:

    vbox = QVBoxLayout()
    hbox.addLayout(vbox)  # 将垂直布局添加到水平布局中
    

原文出处:/show_1GW1rWDvrSIV.html