如何使用主线程中运行的程序中的数据绘制两个实时更新的图?
我尝试在 PyQTGraph 中使用 QApplication 类,但 QApplication.exec()函数阻止主程序执行,也不能在线程上运行。
对这三个问题的回答可能会有所帮助:
1)是否有另一个python可视化库/ API,它不需要使用主线程来绘制对象,但是它足够快以绘制实时图?
2)如何使用Python的多处理功能实现这一目标?我刚刚学会了线程,因此多处理似乎令人生畏。在主程序和另一个处理更新图之间传递数据需要哪些代码行?
3)多处理是否足够快以从主流程更新一个流程中的实时图?
非常感谢您提前提供任何帮助。
答案 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能够处理......