Обновление меток на основе значений, полученных через COM-порт - PullRequest
0 голосов
/ 24 сентября 2019

Сообщество Hi StackOverflow,

Я столкнулся с некоторыми проблемами при обновлении меток в реальном времени на основе значений, полученных от COM-портов.Мой скрипт Python для консоли работает хорошо (temp.py)

import serial
from serial.tools import list_ports

GET_INTERN_TEMP_STRING = STRING TO GET INTERN SENSOR TEMP
GET_EXTERN_TEMP_STRING = STRING TO GET OUTER SENSOR TEMP

def openConnection(PID):
    ports = list(list_ports.comports())
    if not ports:
        return -1
    for p in ports:
        print(p)
        if PID in format(p.pid, 'x'):
            s = serial.Serial(p.device)
            return s
        else:
            return -1

def getExternTemp(s):
    s.write(bytes(GET_EXTERN_TEMP_STRING,"ascii"))
    answer = str(s.readline())
    answer = answer.split("|")
    if answer[2] == "EXTTEMP":
        temp = float(answer[3])
        print("External temperature is "+str(temp))
        return(temp)

def getInternTemp(s):
    s.write(bytes(GET_INTERN_TEMP_STRING,"ascii"))
    answer = str(s.readline())
    answer = answer.split("|")
    if answer[2] == "CURRTEMP":
        temp = float(answer[3])
        print("Internal temperature is " + str(temp))
        return(temp)

def main():
    i=1
    s=openConnection("2008")
    while i !=0:
        getExternTemp(s)
        getInternTemp(s)


if __name__ == '__main__':
    main()

Это простой код, который передает живую информацию о датчике на консоль, поэтому я создаю небольшой графический интерфейс с Qt designer и получаю дизайн.пользовательский файл.Он имел 4 метки (2 метки константы, такие как «Out temp» и «Int temp» и 2 переменные, которые должны содержать значение, возвращаемое на COM-порт) и одну кнопку, которая инициализирует COM-соединение.

Вот мой второй кодкод:

import sys
import temp as cvTemp
from PyQt5 import QtCore, QtGui, uic, QtWidgets

qtCreatorFile = "design.ui"  # Enter file here.
CON_OK = False

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

PID = "2008"  # from windows in hexa
s = None


class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        global s
        s = self.pushButton_connect.clicked.connect(self.connect)
        timer = QtCore.QTimer()
        timer.timeout.connect(self.updateTemp)
        timer.start(1000)


    def connect(self):
        s = cvTemp.openConnection(PID)
        global CON_OK
        if s == -1:
            self.pushButton_connect.setStyleSheet("background-color: red")
            CON_OK = False
        else:
            self.pushButton_connect.setStyleSheet("background-color: green")
            CON_OK = True
            print(CON_OK)
            print("Connection OK")
            return s

    def updateTemp(self):
        global s
        print("UPDATE TEMP")
        outTemp = str(cvTemp.getExternTemp(s))
        intTemp = str(cvTemp.getInternTemp(s))
        print(intTemp)
        print(outTemp)
        self.label_OutTempVal.setText(outTemp)
        self.label_InTempVal.setText(intTemp)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

Я также пытаюсь выполнить:

timer = QtCore.QTimer()
timer.timeout.connect(self.updateTemp)
timer.start(1000)

В цикле if __name__ == "__main__" juste после window.show, но он все еще не работает.Как видите, я пытаюсь обновлять каждую 2 метку каждую секунду, но это не работает, поэтому я был бы рад, если бы кто-то мог исправить меня и объяснить мне проблему

...