Как на pyqt5 сделать таймер от числа n до 0

По сути таймер - это обратный секундомер, но я не понимаю как от времени отнимать эту секунду?

Как на PyQt5 сделать таймер от числа n до 0.


Ответы (1 шт):

Автор решения: S. Nick

Пожалуйста, предоставляйте свои попытки сделать то что вы хотите получить.

Вам не надо от времени отнимать эту секунду, вам надо от какого-то числа отнимать 1 спустя каждую секунду.

import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, \
    QLCDNumber, QGridLayout, QSpinBox, QAbstractSpinBox 
from PyQt5.QtCore import QTimer, Qt


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.lcd = QLCDNumber()
        self.button = QPushButton("Start")
        self.button.clicked.connect(self.timerStart)
        self.buttonReset = QPushButton("Reset")
        self.buttonReset.clicked.connect(self.timerReset)
        self.spinBox = QSpinBox()
        self.spinBox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
        self.spinBox.setMaximum(222)
        self.spinBox.setSingleStep(1)
        self.spinBox.setProperty("value", 7)
        self.spinBox.setWrapping(True)
        self.spinBox.setAlignment(Qt.AlignRight)       
        
        layout = QGridLayout()
        layout.addWidget(self.lcd, 0, 0, 1, 2)
        layout.addWidget(self.spinBox, 1, 0, 1, 2)
        layout.addWidget(self.button, 2, 0)
        layout.addWidget(self.buttonReset, 2, 1)
        self.setLayout(layout)
        
        self.timer = QTimer(self)                            
        self.timer.timeout.connect(self.showTime)                   
        self.timer.setInterval(1000)                              # 1 sec
        self.time = 0

    def showTime(self):  
        self.lcd.display(self.time)
        self.time -= 1                                            # !!!
        if self.time < 0:
            self.timer.stop()
            self.button.setText("Start")
            self.time = 0

    def timerStart(self):
        if self.button.text() == "Start":
            if not self.time: self.time = self.spinBox.value()
            self.timer.start()
            self.button.setText("Stop")
        else:
            self.timer.stop()       
            self.button.setText("Start")

    def timerReset(self):
        self.timer.stop()       
        self.button.setText("Start")
        self.time = 0
        self.lcd.display(self.time)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle("Fusion")                    
    window = Window()
    window.resize(300, 150)
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка