Сброс выхода на номер QLCD при сбросе таймера - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время у меня есть код, который запускает таймер обратного отсчета с помощью кнопки. Я хотел бы, чтобы каждый раз, когда пользователь нажимал кнопку, таймер перезапускался со 120, в настоящее время он просто продолжает работать и не сбрасывается.

соответствующая секция Моего кода выглядит следующим образом:

class ControlMainWindow(QtWidgets.QMainWindow):
    def __init__(self,parent=None):
        super(ControlMainWindow,self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.OuterSwitch.clicked.connect(self.OuterControl)
        self.ui.InnerSwitch.clicked.connect(self.InnerControl)

        self.current_timer = None
        self.LCD_timer = None
        self.i = 121

    def LCDtimer(self):
        if self.LCD_timer:
            self.LCD_timer.stop()
            self.LCD_timer.deleteLater()
        self.LCD_timer = QtCore.QTimer()
        self.LCD_timer.start(0)
        self.LCD_timer.timeout.connect(self.updateLCDNumber)

    def starttimer(self):
        if self.current_timer:
            self.current_timer.stop()
            self.current_timer.deleteLater()
        self.current_timer=QtCore.QTimer()
        self.current_timer.setSingleShot(True)
        self.current_timer.start(120000)
        self.current_timer.timeout.connect(self.InnerSwitchOn)


    def updateLCDNumber(self):
        if self.i !=0:
            QtTest.QTest.qWait(1000)
            self.i = self.i-1
            self.ui.Timer.display(self.i)

    def InnerSwitchOn(self):   
        self.ui.InnerSwitch.setEnabled(True)

    def OuterControl(self):
        if GPIO.input(Inner)==0: #InnerDoorOpen
            return GPIO.output(Outer,GPIO.HIGH),print("Please Close Inner Door")
        elif GPIO.input(Outer) ==1: #Outer Door Close
            self.ui.OuterSwitch.setText(QtWidgets.QApplication.translate("MainWindow", "Close Outer Door",None))
            QtWidgets.QApplication.processEvents()
            return GPIO.output(Outer,GPIO.LOW) #Open Outer Door
        elif GPIO.input(Outer) == 0: #OuterDoor Open
            self.ui.InnerSwitch.setEnabled(False)
            self.ui.OuterSwitch.setText(QtWidgets.QApplication.translate("MainWindow", "Open Outer Door",None))
            QtWidgets.QApplication.processEvents()
            self.LCDtimer()
            self.starttimer()
            return GPIO.output(Outer,GPIO.HIGH) #Close OuterDoor

Как я могу сделать сброс таймера при каждом повторном нажатии кнопки вместо того, чтобы она постоянно работала?Спасибо.

1 Ответ

0 голосов
/ 28 сентября 2018

Итак, через 2 дня мне удалось решить эту проблему.Только одна строка кода действительно отсутствовала.

Чтобы решить эту проблему, все было просто, мне нужно было установить на ЖК-дисплее значение 120 до выполнения функции.

, чтобы привести пример:

- Вызов кнопки для открытия и закрытия внешней двери:

    def OuterControl(self):
        if GPIO.input(Inner) == 0:  # InnerDoorOpen
            return GPIO.output(Outer, GPIO.HIGH), print("Please Close Inner Door")
        elif GPIO.input(Outer) == 1:  # Outer Door Close
            self.ui.OuterSwitch.setText(QtWidgets.QApplication.translate("MainWindow", "Close Outer Door", None))
            QtWidgets.QApplication.processEvents()
            return GPIO.output(Outer, GPIO.LOW)  # Open Outer Door
        elif GPIO.input(Outer) == 0:  # OuterDoor Open
            self.ui.InnerSwitch.setEnabled(False)
            self.ui.OuterSwitch.setText(QtWidgets.QApplication.translate("MainWindow", "Open Outer Door", None))
            QtWidgets.QApplication.processEvents()
            self.LCDtimer()
            self.starttimer()
return GPIO.output(Outer, GPIO.HIGH)

Затем настройка таймера и синхронизация номера ЖК-дисплея с таймером:

        self.current_timer = None
        self.LCD_timer = None
        self.i = 121


    def LCDtimer(self):
        if self.LCD_timer:
            self.LCD_timer.stop()
            self.LCD_timer.deleteLater()
        self.LCD_timer = QtCore.QTimer()
        self.ui.Timer.display(120)
        self.LCD_timer.start(0)
        self.LCD_timer.timeout.connect(self.updateLCDNumber)

    def starttimer(self):
        if self.current_timer:
            self.current_timer.stop()
            self.current_timer.deleteLater()
        self.i = 121

        self.current_timer = QtCore.QTimer()
        self.current_timer.setSingleShot(True)
        self.current_timer.start(123000)
        self.current_timer.timeout.connect(self.InnerSwitchOn)

    def updateLCDNumber(self):
        if self.i != 0:
            QtTest.QTest.qWait(1000)
            self.i -= 1
            self.ui.Timer.display(self.i)

    def InnerSwitchOn(self):
        self.ui.InnerSwitch.setEnabled(True)
...