QGridLayout 与 PlotWidget-pyqtgraph
QGridLayout with PlotWidget-pyqtgraph
我有 3 个 PlotWidget
(来自 pyqtgraph
库)、obj1
、obj2
和 obj3
,我尝试将其插入到 QGridLayout 中.我想在一行中显示所有三个对象,但 obj1
必须是 obj2
和 obj3
的两倍。
于是我写道:
layout.addWIdget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)
但是,从视觉上看,obj1
比具有相同大小的 obj2
和 obj3
小得多:
---------------------------------------------------
| 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
看起来比 obj2
和 obj3
大,它们的大小仍然相同,这是预期的行为:
---------------------------------------------------
| 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)
我有 3 个 PlotWidget
(来自 pyqtgraph
库)、obj1
、obj2
和 obj3
,我尝试将其插入到 QGridLayout 中.我想在一行中显示所有三个对象,但 obj1
必须是 obj2
和 obj3
的两倍。
于是我写道:
layout.addWIdget(obj1, 0, 0, 1, 2)
layout.addWidget(obj2, 0, 2, 1, 1)
layout.addWidget(obj3, 0, 3, 1, 1)
但是,从视觉上看,obj1
比具有相同大小的 obj2
和 obj3
小得多:
---------------------------------------------------
| 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
看起来比 obj2
和 obj3
大,它们的大小仍然相同,这是预期的行为:
---------------------------------------------------
| 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)