Использование QThread для чтения обновления последовательных данных из Arduino - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь прочитать серийные данные, чтобы обновить страницу диагностики. Я нашел этот код после долгого поиска и смог заставить его работать для моего кода. Но теперь мой графический интерфейс будет случайным сбоем. Иногда это работает безупречно, а иногда случайно падает. Я знаю, что это связано с этим, так как я прокомментировал это и не смог вызвать сбой графического интерфейса.

Я использую PyQt5 с Qt Designer.

Спасибо за вашу помощь!

class WorkerThread(QtCore.QObject):
    signalExample = QtCore.pyqtSignal(int)

    def __init__(self):
        super().__init__()

    @QtCore.pyqtSlot()
    def run(self):
        while True:
            # Long running task ...
            rawserial = ser.readline()
            cookedserial = rawserial.decode('utf-8').strip('\r\n')
            datasplit = cookedserial.split(',')
            global temperature
            temperature = datasplit[0].strip('<')
            print(temperature)
            self.signalExample.emit(temperature)
            time.sleep(1)

class Ui_DIAGNOSTICS(object):
    def __init__(self, parent = None):
        super(Ui_DIAGNOSTICS,self).__init__()
        self.worker = WorkerThread()
        self.workerThread = QtCore.QThread()
        self.workerThread.started.connect(self.worker.run)  # Init worker run() at startup (optional)
        self.worker.signalExample.connect(self.setTemp)  # Connect your signals/slots
        self.worker.moveToThread(self.workerThread)  # Move the Worker object to the Thread object
        self.workerThread.start()
        time.sleep(1)   

    def setTemp(self):
        self.TEMP.display(temperature)
...