如何使用Pyqt5创建线程以在python GUI中读取串行数据

时间:2019-12-25 19:28:04

标签: pyqt5

我厌倦了在Pyqt5应用程序中从串行端口读取连续数据,并且创建了另一个线程来读取串行端口数据,但是该线程挂起了,我尝试进行延迟,但是它的工作量与延迟值和然后GUI崩溃。这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets
from serialThreadFile import serialThreadClass
from PyQt5.QtCore import QThread, pyqtSignal
import time

class CloneThread(QThread):
    signal = pyqtSignal(int)

    def __init__(self):
        super(CloneThread, self).__init__(parent=None)

    def run(self):
        while True:

            water_level = self.mySerial.read_data()  # reading data from Arduino
            water_level = water_level.replace("\r\n", "")
            water_level = int(water_level)
            #water_level = 0
            #water_level += 1
            if self.tabWidget.currentIndex() == 1:
                self.progressBar_2.setValue(water_level)
                if water_level > 80:
                    self.autoLabel.setText('HIGH LEVEL')
                    self.autoLabel.setStyleSheet("color: rgb(250, 0, 20);")
                    self.close_valve()

                elif 80 > water_level > 50:
                    self.autoLabel.setText('AVERAGE')
                    self.autoLabel.setStyleSheet("color: rgb(250, 0, 20);")

                elif water_level < 50:
                    self.autoLabel.setText('LOW LEVEL')
                    self.autoLabel.setStyleSheet("color: rgb(254, 226, 62);")
                    self.open_valve()

            elif self.tabWidget.currentIndex() == 0:
                self.progressBar_1.setValue(water_level)
                if water_level > 80:
                    self.manual_label.setText('HIGH LEVEL')
                    self.manual_label.setStyleSheet("color: rgb(250, 0, 20);")

                elif 80 > water_level > 50:
                    self.manual_label.setText('AVERAGE')
                    self.manual_label.setStyleSheet("color: rgb(250, 0, 20);")

                elif water_level < 50:
                    self.manual_label.setText('LOW LEVEL')
                    self.manual_label.setStyleSheet("color: rgb(254, 226, 62);")
            self.signal.emit(water_level)

0 个答案:

没有答案