使用pyqt图绘制实时数据时,gui没有响应

问题描述

我想用pyqt5和pyqtgraph绘制一些来自串行端口的数据。我的绘图功能效果很好,因此可以更新gui中的数据。但是,gui在绘制和更新数据时有很多滞后。例如,当我想按任意按钮时,按钮会在1-2秒后进行交互。我该如何解决这个问题?

以下是我的代码的几行:

收集数据的模块

class Data():
def __init__(self,port):
    self.readout = [0,0]
    self.packet_number_array = []
    self.pressure_array = []
    self.height_array = []
    self.speed_array = []
    self.temperature_array = []
    self.pitch_array = []
    self.roll_array = []
    self.yaw_array = []
    self.voltage_array = []
    self.gps_lat_array = []
    self.gps_long_array = []

    self.tempData = 0

    try:
        self.sp = serial.Serial(port,9600)
        self.bufferLock = threading.Lock()
        self.timerData = QtCore.QTimer()
        self.timerData.timeout.connect(self.updateThread)
        self.timerData.start(100)

    except ValueError as e:
        print("Serial port error ...")
        return None

def updateThread(self):
    
    while (self.sp.inWaiting() == 0):
        pass

    self.bufferLock.acquire()

    td = self.sp.readline().decode('UTF-8')[:-2]
    # print(td)
    rbuf = td.split(',')
    
    team_number = int(rbuf[0])
    packet_number = int(rbuf[1])
    time_time = str(rbuf[2])
    pressure = int(rbuf[3])
    height = float(rbuf[4])
    speed = float(rbuf[5])
    temperature = float(rbuf[6])
    voltage = float(rbuf[7])
    gps_lat = float(rbuf[8])
    gps_long = float(rbuf[9])
    gps_alt = float(rbuf[10])
    satellite_state = str(rbuf[11])
    pitch = float(rbuf[12])
    roll = float(rbuf[13])
    yaw = float(rbuf[14])
    spinning_number = int(rbuf[15])
    video_state = str(rbuf[16])

    self.readout = [team_number,packet_number,time_time,pressure,height,speed,temperature,voltage,gps_lat,gps_long,gps_alt,satellite_state,pitch,roll,yaw,spinning_number,video_state]

    # append to graph buffers
    self.packet_number_array = np.append(
        self.packet_number_array,packet_number)
    self.pressure_array = np.append(self.pressure_array,pressure)
    self.height_array = np.append(self.height_array,height)
    self.speed_array = np.append(self.speed_array,speed)
    self.temperature_array = np.append(
    self.temperature_array,temperature)
    self.voltage_array = np.append(self.voltage_array,voltage)
    self.pitch_array = np.append(self.pitch_array,pitch)
    self.roll_array = np.append(self.roll_array,roll)
    self.yaw_array = np.append(self.yaw_array,yaw)
    self.gps_lat_array = np.append(self.gps_lat_array,gps_lat)
    self.gps_long_array = np.append(self.gps_long_array,gps_long)

    # sleep(.4)
        
    self.tempData = packet_number


    self.bufferLock.release()

在gui中更新数据的模块:

    def startGcs(self):

    if dt.getReadout()[1]==0:
        self.msg.setWindowTitle('Hata')
        self.msg.setText('')
        self.msg.setIcon(QtWidgets.QMessageBox.Warning)
        x = self.msg.exec_()
    
    else:
        self.timerWriting = QtCore.QTimer()
        self.timerWriting.timeout.connect(self.writingCsvFunc)
        self.timerWriting.start()

        self.timerPlotting = QtCore.QTimer()
        self.timerPlotting.timeout.connect(self.pltAndSimFunc)
        self.timerPlotting.start()

        self.gui.tahrikButton.setEnabled(True)
        self.gui.tahrikButtonStop.setEnabled(True)
        self.gui.ayrilButton.setEnabled(True)
        self.gui.durdurButton.setEnabled(True)

    def pltAndSimFunc(self):

        [packet_number_array,pressure_array,height_array,speed_array,temperature_array,pitch_array,roll_array,yaw_array,voltage_array,gps_lat_array,gps_long_array] = dt.getArrays()
    self.gui.yukseklikGraphCurve.setData(packet_number_array,height_array)
    self.gui.sicaklikGraphCurve.setData(
        packet_number_array,temperature_array)
    self.gui.hizGraphCurve.setData(packet_number_array,speed_array)
    self.gui.basincGraphCurve.setData(packet_number_array,pressure_array)
    self.gui.gerilimGraphCurve.setData(packet_number_array,voltage_array)
    self.gui.gpsGraphCurve.setData(gps_long_array,gps_lat_array)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...