QGridLayout 与 PlotWidget-pyqtgraph

QGridLayout with PlotWidget-pyqtgraph

我有 3 个 PlotWidget(来自 pyqtgraph 库)、obj1obj2obj3,我尝试将其插入到 QGridLayout 中.我想在一行中显示所有三个对象,但 obj1 必须是 obj2obj3 的两倍。

于是我写道:

layout.addWIdget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)

但是,从视觉上看,obj1 比具有相同大小的 obj2obj3 小得多:

---------------------------------------------------
| obj1 |     obj2           |         obj3         |
---------------------------------------------------

但是,如果我写:

layout.addWIdget(obj1, 0, 0, 1, 1)
layout.addWidget(obj2, 0, 1, 1, 6)
layout.addWidget(obj3, 0, 7, 1, 6)

obj1 看起来比 obj2obj3 大,它们的大小仍然相同,这是预期的行为:

---------------------------------------------------
|          obj1           |    obj2   |    obj3   |
---------------------------------------------------

这似乎与 addWidget 的文档完全矛盾,因为我的第一个解决方案应该产生预期的行为,不是吗?

编辑:一段代码

import pyqtgraph as qtg

obj1 = qtg.PlotWidget()
obj2 = qtg.PlotWidget()
obj3 = qtg.PlotWidget()

layout = QGridLayout()

layout.addWIdget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)

box = QGroupBox()
box.setLayout(layout)
self.setCentralWidget(box)

当您使用 void QGridLayout::addWidget(QWidget* widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0) 时,rowSpan 和 columnSpan 指的是另一行或另一列,在您的情况下,您刚刚给出了一行,rowSpan 未应用,例如,如果您添加新行你得到以下内容:

obj1 = qtg.PlotWidget()
obj2 = qtg.PlotWidget()
obj3 = qtg.PlotWidget()

obj4 = qtg.PlotWidget()
obj5 = qtg.PlotWidget()
obj6 = qtg.PlotWidget()
obj7 = qtg.PlotWidget()

layout = QGridLayout()

layout.addWidget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)
layout.addWidget(obj4, 1, 0, 1, 1)
layout.addWidget(obj5, 1, 1, 1, 1)
layout.addWidget(obj6, 1, 2, 1, 1)
layout.addWidget(obj7, 1, 3, 1, 1)

box = QGroupBox(self)
box.setLayout(layout)
self.setCentralWidget(box)

如果您需要确定比例,则必须使用拉伸,在这种情况下 setColumnStretch():

obj1 = qtg.PlotWidget()
obj2 = qtg.PlotWidget()
obj3 = qtg.PlotWidget()

layout = QGridLayout()

layout.addWidget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)
layout.setColumnStretch(0, 2)
layout.setColumnStretch(2, 1)
layout.setColumnStretch(3, 1)

box = QGroupBox(self)
box.setLayout(layout)
self.setCentralWidget(box)

您可以通过 QHBoxLayout 获得相同的效果:

obj1 = qtg.PlotWidget()
obj2 = qtg.PlotWidget()
obj3 = qtg.PlotWidget()

layout = QHBoxLayout()

layout.addWidget(obj1, stretch=2)
layout.addWidget(obj2, stretch=1)
layout.addWidget(obj3, stretch=1)

box = QGroupBox(self)
box.setLayout(layout)
self.setCentralWidget(box)