PyQtGraph PlotWidget:如何强制每次绘制(更改范围)以进行“实时”绘图

Posted

技术标签:

【中文标题】PyQtGraph PlotWidget:如何强制每次绘制(更改范围)以进行“实时”绘图【英文标题】:PyQtGraph PlotWidget : how to force each draw (changing range) for "real time" plotting 【发布时间】:2014-05-12 21:09:10 【问题描述】:

我正在尝试让 PlotWidget 快速移动(从左到右),就像它是心电图一样。这是我想要的一个例子(除了他使用 PyQwt (这与我的项目不兼容,因为我使用 PySide(而不是 PyQt),而且我希望 X 轴也从左向右移动):

但是,我不知道该怎么做。我可以绘制抓取图,我可以使用以下方法使其从左向右移动:

 myPlotWidget.setXRange(0, 100)

然后

  myPlotWidget.setXRange(1, 101)

这使它看起来像是从左到右移动(1 个单位),但我现在不知道如何使其平滑和自动。我试图制作一个看起来像这样的循环:

 for i in range(1000):
     myPlotWidget.setXRange(10+i, 100+i, update=True)

但是在循环过程中情节没有更新......情节只有在循环结束时才会更新,所以我看不到它从左到右“移动”,我只有最终结果。

有人可以帮助我吗?有什么办法可以强制重绘循环的 1000 次?

我一开始认为它计算速度太快,所以我尝试了这个

 for i in range(1000):
     myPlotWidget.setXRange(10+i, 100+i, update=True)
     time.sleep

但它当然没有用。

非常感谢您的帮助!

【问题讨论】:

见:***.com/questions/18080170/… 【参考方案1】:

在循环结束时,当它被更新时,你有类似myPlotWidget.update()myPlotWidget.canvas.draw() 的东西,对吧?

只需将其移入 for 循环即可。但是,如果您尝试绘制大量数据,这会变慢。

【讨论】:

否; QWidget.update() 仅安排 重绘以供以后使用。您必须调用 QApplication.processEvents() 或返回 Qt 事件循环。 Luke 是对的,非常感谢您的帮助。它与 QApplication.processEvents() 完美配合。您能否将其发布为问题的答案(而不是评论),以供将来可能遇到相同问题的人使用。我很高兴将其作为“有用的答案”进行检查:) 再次感谢您

以上是关于PyQtGraph PlotWidget:如何强制每次绘制(更改范围)以进行“实时”绘图的主要内容,如果未能解决你的问题,请参考以下文章

如何根据数据获得具有可变颜色和网格的 pyqtgraph plotwidget?

在 PlotWidget GUI 中运行实时 pyqtgraph

Pyqtgraph plotwidget:无法将轴刻度的字体粗细更改为 BOLD

如何在 PlotWidget 内制作标签?

如何在不同图表之间共享 pyqtgraph 图?

试图在 PyQt5 中的 pyqtgraph plotwidget 中获取坐标显示的光标