移动到 QGraphicsView 时创建没有窗口打开和关闭的 pyqtgraph 图

Posted

技术标签:

【中文标题】移动到 QGraphicsView 时创建没有窗口打开和关闭的 pyqtgraph 图【英文标题】:Create pyqtgraph plot without window opening and closing when moved to QGraphicsView 【发布时间】:2021-10-02 19:28:29 【问题描述】:

我正在尝试为 Pyqt 应用程序创建一个折线图,它本身可以正常工作,但我很恼火的是它会在瞬间打开一个窗口,然后关闭,并且绘图移动到 Qt QGraphicsView。我已经搜索了解决方案,但似乎找不到任何有效的答案。

def lineChartTest(self):
    x = np.array(list(range(0, 10)))
    y = np.array([3, 7, 5, 11, 8, 13, 9, 16, 15, 12])
    x_smooth = np.linspace(x.min(), x.max(), 300)
    spl = make_interp_spline(x, y, k=3)
    y_smooth = spl(x_smooth)

    plot = pg.plot()
    plot.setGeometry(0, 0, 1007, 500)
    plot.setLabel('bottom', 'X-axis Values')
    plot.setLabel('left', 'Y-axis Values')
    plot.setXRange(0, 10)
    plot.setYRange(0, 20)
    plot.setTitle("Test pyqtgraph")
    plot.setBackground('1E1B44')
    line = plot.plot(x_smooth, y_smooth, pen=pg.mkPen('E42AFF', width=2))
    plot.addLegend()

    self.scene.addWidget(plot)

这是我目前用来创建绘图的代码。

【问题讨论】:

尝试删除plot.show() 我试过了,但很遗憾没用。 @TroyB。请提供minimal reproducible example 【参考方案1】:

plot() 函数在返回之前自动显示 PlotWidget(请参阅sources),因此在添加到视图之前它会短暂显示为***窗口。

由于您没有向plot() 添加任何参数,因此您实际上并不需要该函数,您只需创建一个新的 PlotWidget 实例并将其添加到视图中:

    def lineChartTest(self):
        # ...
        plot = pg.PlotWidget()
        # ...

另一方面,PlotWidget已经是一个 QGraphicsView,因此将视图添加到另一个视图可能没有多大意义。考虑使用 PlotWidget 代替 QGraphicsView,并向其中添加 PlotItems。

【讨论】:

谢谢!这很棒

以上是关于移动到 QGraphicsView 时创建没有窗口打开和关闭的 pyqtgraph 图的主要内容,如果未能解决你的问题,请参考以下文章

当窗口大小改变时,如何在 Qt 中自动缩放图表?

QGraphicsItem在移动后没有留在原地

在自定义 QGraphicsView 中移动 QGraphicsItem 问题

QGraphicsView 放大或移动时不绘制行项目?

在 QGraphicsView 中移动项目

在 QGraphicsView 上锁定视图