QGridLayout不同的列宽

hoa*_*oan 2 python pyqt pyqt4 qgridlayout qlayout

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

 _________
|  |      |
|1 |   2  |
|__|______|
|  3 | 4  |
|____|____|
Run Code Online (Sandbox Code Playgroud)

基本上,我希望第一行的单元格比单元格2薄,但第二行的单元格3和4应该具有相等的宽度。

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

eyl*_*esc 9

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

QGridLayout :: addWidget(QWidget *小部件,int fromRow,int fromColumn,int rowSpan,int columnSpan,Qt :: Alignment alignment = 0)

这是一个过载功能。

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

如果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_())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • Qt不直接实现权重,另一种选择是使用strech函数,检查我的其他答案:/sf/ask/3337724211/ (2认同)