【问题标题】:QGridLayout with PlotWidget-pyqtgraphQGridLayout 与 PlotWidget-pyqtgraph
【发布时间】:2018-05-20 18:37:35
【问题描述】:

我有 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)

但是,在视觉上,obj1obj2obj3 小得多,它们的大小相同:

---------------------------------------------------
| 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)

【问题讨论】:

  • 显示你的代码。
  • 我已经用我记得的内容编辑了第一篇文章,因为我面前没有代码。
  • 如果你说它不起作用,这可能是由于其他原因,所以把重现你错误的代码,即minimal reproducible example
  • QPlotWidget 是什么?,您可以指出您在 pyqtgraph 文档的哪个部分提到它或如何导入它。

标签: python pyqtgraph qgridlayout


【解决方案1】:

当您使用 void QGridLayout::addWidget(QWidget* widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0) 时,rowSpan 和 columnSpan 指的是另一行或另一列,并且在您的情况下,您刚刚给出了一行行跨度不适用,例如,如果您添加一个新行,您会得到以下:

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)

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 2022-07-11
    • 2016-12-12
    • 2019-02-10
    • 2018-07-13
    • 2019-07-27
    • 2017-07-04
    • 2012-09-20
    • 2020-10-19
    相关资源
    最近更新 更多