如何在不使用或阻止主线程的情况下绘制多个实时图?

时间:2016-10-21 21:47:33

标签: python matplotlib multiprocessing real-time pyqtgraph

如何使用主线程中运行的程序中的数据绘制两个实时更新的图?

我尝试在 PyQTGraph 中使用 QApplication 类,但 QApplication.exec()函数阻止主程序执行,也不能在线程上运行。

对这三个问题的回答可能会有所帮助:

1)是否有另一个python可视化库/ API,它不需要使用主线程来绘制对象,但是它足够快以绘制实时图?

2)如何使用Python的多处理功能实现这一目标?我刚刚学会了线程,因此多处理似乎令人生畏。在主程序和另一个处理更新图之间传递数据需要哪些代码行?

3)多处理是否足够快以从主流程更新一个流程中的实时图?

非常感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

这是特定于PyQt的,因为这是为了线程安全 。 所以尝试用例如启动另一个线程。 openvc模块用

做第二个图
import threading
threading.Timer(2, self.some_opencvplotfunction).start() #start every 2 sec

你可能在opencv函数中使用主应用程序中的任何pyqt功能,因为这会导致运行时错误

另一种方法是使用matplotlib并实例化一个或多个子图! 然后将matplotlib对象绑定到PyQT GUI中,如:

if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        app.setStyle(QStyleFactory.create("Windows"))
        Dialog = QtGui.QDialog()
        ui = MAIN()
        ui.setupUi(Dialog) 

并在您的主要班级

    ui.figure, ui.axis = plt.subplots(figsize=(7.6, 6.1))
    ui.canvas = FigureCanvas(ui.figure)
    scene.addWidget(ui.canvas)

你可以为你的gui添加尽可能多的sublots,因为你的cpu能够处理......