pyqt的pyqtgragh用多线程更新动态绘制曲线完整代码
时间: 2023-07-03 17:12:32 浏览: 113
下面是一个使用PyQtGraph进行动态曲线绘制的完整示例代码,其中使用了多线程实现数据更新:
```python
import sys
import numpy as np
from PyQt5 import QtWidgets
import pyqtgraph as pg
import time
from PyQt5.QtCore import QThread, pyqtSignal
class PlotThread(QThread):
update_signal = pyqtSignal(list)
def __init__(self):
super(PlotThread, self).__init__()
def run(self):
while True:
data = np.random.normal(size=100)
self.update_signal.emit(data)
time.sleep(0.1)
class PlotWidget(pg.GraphicsLayoutWidget):
def __init__(self):
super(PlotWidget, self).__init__()
self.plot_item = self.addPlot(0, 0)
self.plot_data = np.zeros(100)
self.plot_curve = self.plot_item.plot(self.plot_data, pen='r')
self.plot_thread = PlotThread()
self.plot_thread.update_signal.connect(self.update_plot_data)
self.plot_thread.start()
def update_plot_data(self, data):
self.plot_data[:-1] = self.plot_data[1:]
self.plot_data[-1] = data[-1]
self.plot_curve.setData(self.plot_data)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = PlotWidget()
win.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个名为PlotWidget的自定义小部件,它继承了pg.GraphicsLayoutWidget,并在其中添加了一个名为plot_item的绘图区域和一个名为plot_curve的曲线。我们还创建了一个名为PlotThread的线程类来生成随机数据,并使用update_signal信号将数据发送回主线程。在主线程中,我们通过连接update_signal信号来更新绘图数据并实时绘制曲线。
阅读全文