The Gui would be responsible for calling the method
get_duration
every update interval.import datetime import time class Timer: def __init__(self): self.timedelta = datetime.timedelta() self.running = False def start(self): self.start_time = datetime.datetime.now() self.running = True def stop(self): if not self.running: return self.timedelta += datetime.datetime.now() - self.start_time self.running = False def reset(self): self.timedelta = datetime.timedelta() self.running = False def get_duration(self): duration = self.timedelta if self.running: duration += datetime.datetime.now() - self.start_time return duration timer = Timer() timer2 = Timer() timer.start() timer2.start() time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') timer2.stop() print('Timer2 stopped') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') timer2.start() print('Timer2 started') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') timer.reset() timer.start() print('timer1 reset & restarted') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}') time.sleep(1) print(f'Timer1: {timer.get_duration()}') print(f'Timer2: {timer2.get_duration()}')
Output:Timer1: 0:00:01.000916
Timer2: 0:00:01.000916
Timer1: 0:00:02.001026
Timer2: 0:00:02.001026
Timer2 stopped
Timer1: 0:00:03.001449
Timer2: 0:00:02.001026
Timer2 started
Timer1: 0:00:04.001503
Timer2: 0:00:03.001080
Timer1: 0:00:05.001634
Timer2: 0:00:04.001211
timer1 reset & restarted
Timer1: 0:00:01.000573
Timer2: 0:00:05.001784
Timer1: 0:00:02.001267
Timer2: 0:00:06.002478