You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQtGraph设置rowspan后PlotWidget高度异常,如何解决?

问题:Pyqtgraph LayoutWidget中rowspan设置不生效,顶部PlotWidget反而最短

我想要设置三个PlotWidget组件:wgt_simplePlot0、wgt_simplePlot1、wgt_simplePlot2。希望wgt_simplePlot0位于顶部,通过rowspan参数将其设置为另外两个组件的15倍高度,但运行脚本后,wgt_simplePlot0反而成为最短的组件。请问问题出在哪里?

环境信息

  • Windows 10
  • Python 3.9 x64
  • Pyqtgraph 0.12.4/0.13.3

代码示例

import pyqtgraph as pg
from pyqtgraph import PlotWidget
from pyqtgraph.Qt import QtCore, QtWidgets

class PlotterWin:
    def __init__(self):

        self.app        = pg.mkQApp()
        self.win        = QtWidgets.QMainWindow()
        gridLayout      = pg.LayoutWidget()

        self.wgt_simplePlot0 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot0, row=0, col=0,  rowspan=15, colspan=10 )

        self.wgt_simplePlot1 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot1, row=16, col=0, rowspan=1, colspan=5 )

        self.wgt_simplePlot2 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot2, row=16, col=5, rowspan=1, colspan=5 )

        self.win.setCentralWidget(gridLayout)

        self.win.show()


if __name__ == "__main__":
    plotter = PlotterWin()

问题原因

Pyqtgraph的LayoutWidget默认不会根据rowspan数值自动按比例分配行高,它会优先依据组件的sizeHint(默认最小尺寸)分配空间。你设置wgt_simplePlot0的rowspan=15,但row1到row15都是空行,这些空行默认没有高度;而row16因为包含两个PlotWidget,会被分配更多空间,最终导致顶部的wgt_simplePlot0反而成为最短的组件。

解决方法

通过LayoutWidget.setRowStretch()方法给对应行设置拉伸因子,明确指定行高比例:

  • 给wgt_simplePlot0所在的row0设置拉伸因子15
  • 给wgt_simplePlot1、wgt_simplePlot2所在的row16设置拉伸因子1

修改后的代码如下:

import pyqtgraph as pg
from pyqtgraph import PlotWidget
from pyqtgraph.Qt import QtCore, QtWidgets

class PlotterWin:
    def __init__(self):

        self.app        = pg.mkQApp()
        self.win        = QtWidgets.QMainWindow()
        gridLayout      = pg.LayoutWidget()

        self.wgt_simplePlot0 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot0, row=0, col=0,  rowspan=15, colspan=10 )
        # 设置行拉伸因子,按比例分配高度
        gridLayout.setRowStretch(0, 15)

        self.wgt_simplePlot1 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot1, row=16, col=0, rowspan=1, colspan=5 )

        self.wgt_simplePlot2 = PlotWidget(background='white')
        gridLayout.addWidget(self.wgt_simplePlot2, row=16, col=5, rowspan=1, colspan=5 )
        # 设置第二行的拉伸因子
        gridLayout.setRowStretch(16, 1)

        self.win.setCentralWidget(gridLayout)

        self.win.show()


if __name__ == "__main__":
    plotter = PlotterWin()
    pg.exec()

另外注意,原代码缺少pg.exec()启动事件循环,添加后才能正常运行窗口。

内容的提问来源于stack exchange,提问作者maynull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:35:09