为什么使用PyQT5我的应用程序崩溃而没有错误

时间:2020-10-11 15:11:15

标签: python pyqt5

我使用QT界面编写了一个应用程序以读取Modbus数据,并在使用PyQT5创建的GUI上显示数据。 当我启动程序时,它在几秒钟后崩溃,我没有消息错误。我用了调试器,没什么错,程序就关闭了。

这是我的代码的一部分,问题出在哪里,我会在后面解释

def displayModbus(self):

    modbusReturn = modbus.readModbus()
    commStatus = modbusReturn[0]


    if commStatus:
        listRegValue = modbusReturn[1]

        #Display data to ui

        if str(listRegValue[1]) == "1":  #HEATING_ST
            self.ui.lnHeatingStatus.setText("On")
        else:
            self.ui.lnHeatingStatus.setText("Off")

        # self.ui..setText(str(listRegValue[2])) #WAIT_TIME_CHG
        # self.ui..setText(str(listRegValue[3])) #RUN_TIME_CHG

        if str(listRegValue[4]) == "1": #ON_WAIT_TIME_P
            self.ui.ledWaitTime.setStyleSheet("QPushButton {background-color:green;}")
        else:
            self.ui.ledWaitTime.setStyleSheet("QPushButton {background-color:red;}")
        
        if str(listRegValue[5]) == "1":  #RUN_CYCLE
            self.ui.lnRunCycle.setText("On")
        else:
            self.ui.lnRunCycle.setText("Off")

        # self.ui..setText(str(listRegValue[6])) #LEVEL_RESET
        # self.ui..setText(str(listRegValue[7])) #CYL_MAN_CYCLE
        # self.ui..setText(str(listRegValue[8])) #CYL_EMPTY
        # self.ui..setText(str(listRegValue[9])) #CYL_EMPTY_END
        # self.ui..setText(str(listRegValue[10])) #NORASYSTEM_MANUAL
        # self.ui..setText(str(listRegValue[11])) #NORASYSTEM_ON
        # self.ui..setText(str(listRegValue[12])) #HEATING_ALLOW

        if str(listRegValue[13]) == "1":  #LOW_AIRFLOW
            self.ui.lnLowAirflow.setText("Low")
        else:
            self.ui.lnLowAirflow.setText("Normal")

        # self.ui..setText(str(listRegValue[15])) #HUM_ALLOW

        TC1 = listRegValue[16] / 100
        self.ui.lnTC1.setText(str(TC1)+" °C") #TC1

        TC2 = listRegValue[17] / 100
        self.ui.lnTC2.setText(str(TC2)+" °C") #TC2

        TC3 = listRegValue[18] / 100
        self.ui.lnTC3.setText(str(TC3)+" °C") #TC3

        TC4 = listRegValue[19] / 100
        self.ui.lnTC4.setText(str(TC4)+" °C") #TC4

        self.ui.lnH1.setText(str(listRegValue[20])+" %RH") #HUM1


        waitTime = str(listRegValue[22] / 3600)
        self.ui.lnWaitTime.setText(str(waitTime+" hr")) #WAIT_TIME_D

        runTime = str(listRegValue[23] / 60)
        self.ui.lnRunTime.setText(str(runTime+" min")) #RUN_TIME_D

        timeRemainM = str(int(listRegValue[24] / 60)) 
        timeRemainS = str(int(listRegValue[24] % 60))
        self.ui.lnTimeRemain.setText(str(timeRemainM + " min "+timeRemainS + " sec")) #TIME_REMAIN_D

        self.ui.lnLevel.setText(str(listRegValue[25])) #LEVEL_D

        self.statusBar().showMessage("Modbus communication OK")

    else:
        self.statusBar().showMessage("Error modbus communication")

经过多次尝试和错误方法后,问题出在此功能上。如果删除它,则程序不会崩溃,但是如果我通过打印功能对其进行修改(例如:print(str(listRegValue [4]))),一切都很好,所以我的问题不是出自mGUI分配odbus模块。 我的函数displayModbus每5秒钟刷新一次(使用QtThreading)。 如果我只保留一个变量来显示我的应用程序,则不会崩溃。

我还有另一个应用程序可以使用相同的displayModbus功能(没有QT5显示)读取和记录Modbus数据,而且我没有问题

我在2台计算机上有此问题,并且在5台计算机(4x Windows 10和1x Linux)上尝试了此问题

  • Python 3.8.6
  • PyQT == 5.15.1
  • PyQt5-sip == 12.8.1

有什么主意吗?

谢谢。

0 个答案:

没有答案