Сообщество 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 метку каждую секунду, но это не работает, поэтому я был бы рад, если бы кто-то мог исправить меня и объяснить мне проблему