实现效果:每隔n秒钟,更新N个点的波形图。
思路:利用QTimer定时器的信号槽机制。QTimer会开辟一个新的线程,当 [超时信号] 发生时,会触发更新波形图的槽函数,以此定时更新波形图,同时不会造成界面卡顿。
import sys
import numpy as np
import pyqtgraph as pg
from test import Ui_Form
import warnings
warnings.filterwarnings('ignore')
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
class MyApp(QWidget, Ui_Form):
timer = None
def __init__(self):
super(MyApp, self).__init__()
self.setupUi(self)
# 设置背景色为灰色
pg.setConfigOption('background', '#f0f0f0')
# 设置前景色为黑色(坐标轴会变黑)
pg.setConfigOption('foreground', 'black')
# 设置曲线颜色和点样式
self.pic = pg.PlotWidget() # 这里有点小不同,没有直接画,而是通过调用方法画
self.curve = self.pic.plot(pen='r', symbol='o') # 返回一条曲线
# 设置坐标上下限
self.pic.setXRange(0, 100)
# self.pic.setYRange(0, 10)
# 设置标题
self.pic.setTitle('波形图')
self.layout = QGridLayout(self.widget)
self.layout.addWidget(self.pic)
self.set_timer()
def set_timer(self):
self.timer = QTimer(self) # QTimer相当于是开辟了一个新的线程 & 必须要有self
self.timer.timeout.connect(self.draw) # 利用信号机制,当[超时信号]发出时,触发画图按钮
self.timer.start(2000) # 这里是毫秒,2s触发一次
def draw(self):
y = np.random.randn(100)
self.curve.setData(y) # 曲线设置数据
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyApp()
w.show()
sys.exit(app.exec())
效果
此外,也可以用自定义信号和QThread线程结合的方法,来满足不定时更新波形图的需要。