Python QGridLayout不同的列宽

Python QGridLayout不同的列宽,python,pyqt,pyqt4,qlayout,qgridlayout,Python,Pyqt,Pyqt4,Qlayout,Qgridlayout,我正在尝试创建一个如下所示的布局: _________ | | | |1 | 2 | |__|______| | 3 | 4 | |____|____| 基本上,我希望第一行的单元格1比第二行的单元格2薄,但是第二行的单元格3和4的宽度应该相等 甚至可以在PyQt4中使用QGridLayout创建这样的布局吗 QGridLayout的任务是创建该类型的结构,为此,您必须使用以下函数: void QGridLayout::addWidget(QWidget*widget,

我正在尝试创建一个如下所示的布局:

 _________
|  |      |
|1 |   2  |
|__|______|
|  3 | 4  |
|____|____|
基本上,我希望第一行的单元格1比第二行的单元格2薄,但是第二行的单元格3和4的宽度应该相等


甚至可以在PyQt4中使用QGridLayout创建这样的布局吗

QGridLayout的任务是创建该类型的结构,为此,您必须使用以下函数:

void QGridLayout::addWidget(QWidget*widget,int fromRow,int fromColumn,int rowSpan,int columnSpan,Qt::Alignment Alignment=0)

这是一个重载函数

此版本将给定的小部件添加到单元格网格,跨越多个 行/列。单元格将从fromRow、fromColumn开始 行跨行和列跨列。小部件将具有给定的 对齐

如果rowSpan和/或columnSpan为-1,则小部件将扩展到 分别为底部和/或右边缘

例如:

import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *

app = QApplication(sys.argv)
w = QWidget()
glay = QGridLayout(w)
glay.addWidget(QLabel("1"), 0, 0)
glay.addWidget(QLabel("2"), 0, 1, 1, 3)
glay.addWidget(QLabel("3"), 1, 0, 1, 2)
glay.addWidget(QLabel("4"), 1, 2, 1, 2)

qsrand(QTime.currentTime().msec())

for label in w.findChildren(QLabel):
    color = QColor(qrand() % 256, qrand() % 256, qrand() % 256)
    label.setStyleSheet('.QLabel{{background: rgb({}, {}, {});}}'.format(color.red(), color.green(), color.blue()))

w.show()
sys.exit(app.exec_())

非常好。(尽管由于公司的安全政策,我看不到快照)出于好奇:一个有3列的网格不也可以吗?(我的意思是:标签“2”跨越2列,标签“4”跨越1列。)根据问题作者提供的图表,可以观察到标签1的重量必须低于标签2、标签3和标签4;label3与label4具有相同的权重,因此一种解决方案是标签具有以下权重:
label1=1
label2=3
label3=2
label4=3
我明白了。嗯,难道没有可能用重量之类的东西来布局吗?(我大致记得这一点,因为这是我在切换到Qt之前使用的
GtkTable
的区别。)Qt不直接实现权重,另一个选项是使用strech函数,请检查我的其他答案: