Countdown immer größere Schritte
Verfasst: Sonntag 17. Mai 2020, 20:55
				
				Hallo zusammen,
ich bastele im Moment an einem Countdown Programm. Die Zeitanzeige steuere ich mit ein Start-Button und einem Pause-Button der den Timer stoppt.
Das ganze funktioniert auf den ersten Blick auch. Allerdings wenn ich den Timer stoppe und wieder auf Start drücke zählt er dann 2 Sekunden pro "tick" runter. Und mit jedem mal Stopp&Start wird es eine Sekunde mehr. Also nach 9 mal stoppen und wieder starten gehen pro Sekunde 10 Sekunden von der Uhr weg.
Ich hoffe jemand kann mir hier weiterhelfen.
Vielen Dank im Voraus.
			ich bastele im Moment an einem Countdown Programm. Die Zeitanzeige steuere ich mit ein Start-Button und einem Pause-Button der den Timer stoppt.
Das ganze funktioniert auf den ersten Blick auch. Allerdings wenn ich den Timer stoppe und wieder auf Start drücke zählt er dann 2 Sekunden pro "tick" runter. Und mit jedem mal Stopp&Start wird es eine Sekunde mehr. Also nach 9 mal stoppen und wieder starten gehen pro Sekunde 10 Sekunden von der Uhr weg.
Ich hoffe jemand kann mir hier weiterhelfen.
Vielen Dank im Voraus.
Code: Alles auswählen
from PyQt5 import QtWidgets, QtCore, QtGui
import StortiTimer
from datetime import time, timedelta, datetime
class ControlLCD(QtWidgets.QWidget):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = StortiTimer.Ui_set_time()
        self.ui.setupUi(self)   
        self.timer = QtCore.QTimer(self)
        #working variables
        self.job_time = None
        self.first_time = None
        self.timey = timedelta(seconds = 1)
        self.ostime = datetime(year= 2030, month = 1, day=1, hour=0, minute=0, second=0)
        
        #connect buttons to events
        self.ui.start_button.clicked.connect(self.start_timer)
        self.ui.kill_Button.clicked.connect(self.quit)
        self.ui.pause_button.clicked.connect(self.pause)
        self.ui.set_button.clicked.connect(self.set_time)
        
    
    def updateLCD(self):
        if self.first_time.hour != 0 or self.first_time.minute != 0 or self.first_time.second != 0:
            self.first_time -= self.timey
            printstring = f"{self.first_time.hour}:{self.first_time.minute}:{self.first_time.second}"
            self.ui.remaining_time.setText(printstring)
            self.timey = timedelta(seconds = 1)
        else:
            self.overshoot()
    def overshoot(self):
        self.ostime += self.timey
        printos = f"{self.ostime.hour}:{self.ostime.minute}:{self.ostime.second}"
        self.ui.extra_time.setText(printos)
        
    
    def set_time(self):
        ''' Get the time from the time setting Window and paste it to the clock'''
        self.job_time = self.ui.job_time.time()
        print_init_time = self.job_time.toString("hh:mm:ss")
        self.ui.remaining_time.setText(print_init_time)
        self.first_time = datetime(year = 2030, month = 1, day = 1, hour= self.job_time.hour(), minute=self.job_time.minute(), second= self.job_time.second())
        
    def start_timer(self):
        self.timey = timedelta(seconds = 1)
        self.timer.start(1000)
        #set the timer event
        self.timer.timeout.connect(self.updateLCD)
    
    def pause(self):
        self.timer.stop()
        self.timey = timedelta(seconds = 1)
    
    def quit(self):
        sys.exit()
        
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    c = ControlLCD()
    c.show()
    sys.exit(app.exec_())