You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何在控件间添加随窗口动态拉伸的均匀间距

Qt 控件间动态可拉伸均匀间距实现

要实现窗口缩放时间隙自动适配、控件在可用空间内均匀排布的效果,直接用Qt布局自带的拉伸占位项即可,效果参考如下:
均匀排布效果参考

实现逻辑

QBoxLayout(QVBoxLayout/QHBoxLayout的父类)的addStretch(stretchFactor)方法会在布局中插入一个可自动伸缩的空白占位项:

  • 所有插入的stretch拉伸因子数值相等时,布局的多余空白会被这些占位项平均分配
  • 窗口尺寸变化时,每个stretch的尺寸会同步按比例调整,自动适配可用空间

你之前的代码只在所有控件末尾加了1个stretch,所以全部多余空白都挤在最后一个控件下方,控件全部堆在布局顶部,达不到均匀分布的效果。

修改方法

如果要实现参考图里「控件和布局上下边缘有留白、控件之间间隙均匀拉伸」的效果:

  • 插入第一个控件前,先加1个拉伸因子为1的stretch
  • 每插入一个控件后,都加1个拉伸因子为1的stretch
  • 10个控件总共会插入11个等因子stretch,所有间隙自动平分空白

如果不需要边缘留白、只需要控件之间有拉伸间隙,只需要在两个控件之间插入等因子stretch即可,10个控件插9个。

可直接运行的修改后代码

#!/usr/bin/python3

import sys
import random

try:
    from PySide6 import QtCore, QtWidgets
except ModuleNotFoundError:
    from PySide2 import QtCore, QtWidgets

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.layout = QtWidgets.QVBoxLayout(self)
        # 按需调整布局整体的边缘边距
        self.layout.setContentsMargins(20, 20, 20, 20)

        # 第一个控件前插入拉伸项
        self.layout.addStretch(1)

        for i in range(0, 10):
            text_label = QtWidgets.QLabel("Hello World",
                            alignment=QtCore.Qt.AlignCenter,
                            styleSheet   = f'''
                                background-color: '#999999';
                                color           : '#000000';
                            '''
                        )
            # 固定控件高度,避免控件被拉伸变形,匹配参考图效果;需要控件本身拉伸就删掉这行
            text_label.setFixedHeight(30)
            self.layout.addWidget(text_label)
            # 每个控件后插入等系数拉伸项
            self.layout.addStretch(1)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())

补充说明

  • addStretch()传入的参数是拉伸因子,只要所有stretch的因子值相等就会平分空白,数值本身大小不影响等比分配效果
  • 如果需要某段间隙宽度是其他间隙的2倍,只需要把对应位置stretch的因子改成2即可
  • 这个方法对水平布局QHBoxLayout同样生效,逻辑完全一致

内容的提问来源于stack exchange,提问作者caveman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:27:22