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_())
