PyQt5中如何为QGridLayout添加拉伸项避免控件随窗口拉伸?
QGridLayout取消控件自动拉伸的优化方案
不需要嵌套额外的QVBoxLayout、QHBoxLayout,直接使用QGridLayout自带的行列拉伸因子配置即可实现需求,代码更简洁易维护。
优化后的完整实现代码:
from PyQt5.QtWidgets import * app = QApplication([]) window = QWidget() GL = QGridLayout(window) # 添加目标控件 GL.addWidget(QPushButton('R1C1'), 0, 0) GL.addWidget(QPushButton('R1C2'), 0, 1) GL.addWidget(QPushButton('R2C1'), 1, 0) GL.addWidget(QPushButton('R2C2'), 1, 1) # 核心配置:给控件外的空行、空列设置拉伸因子,吃掉窗口多余空间 GL.setRowStretch(2, 1) GL.setColumnStretch(2, 1) window.showMaximized() app.exec_()
配置逻辑说明:
setRowStretch(行索引, 拉伸因子)、setColumnStretch(列索引, 拉伸因子)是QGridLayout自带的方法,拉伸因子为0的行列不会分配窗口多余空间,因子越大分配到的多余空间越多。- 上述代码中控件占用了索引为0、1的行和列,我们给索引为2的空行、空列设置拉伸因子为1,窗口的所有多余空间都会被这两个空白的行列占用,控件就会保持原有尺寸、停靠在窗口左上角,不会随窗口拉伸变形。
- 如果需要调整控件的停靠位置(比如居中、停靠右上角等),只需要调整拉伸因子的配置即可,不需要修改布局嵌套结构。
内容的提问来源于stack exchange,提问作者Viswa
相关产品推荐
相关产品推荐

