如何解决使用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 举报,一经查实,本站将立刻删除。