Kann mir jemand erklären, wo der fehler ist(Python Timer Tk)?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Auch wenn ich keine Erfahrung mit TKinter habe, sollte es am folgenden Problem liegen:

Die Funktion time.sleep(1) blockiert den gesamten Thread (in deinem Fall auch Programm). In dieser Zeit wird kein weiterer Code ausgeführt. Es kann also auch nicht auf ein Button Druck reagiert werden.

Nach dem Start Button sollte der Timer durchlaufen. Dieser Teil sollte ohne Probleme funktionieren.

Ein while True ist in TKinter auch nicht so gut.

Hier gibt es ein stackoverflow Beitrag zu deinem Thema.

Deine Funktion müsste dann am Ende im etwa so aussehen:

def timer_start_press():
    global timer
    global root_timer
    if timer == 0:
        lbl_timer.config(text='Time is Up')
    else:
        timer -= 1
        lbl_timer.config(text=str(timer))
    root_timer.after(1000, timer_start_press)

Die while True Schleife hast du durch eine Rekursion abgelöst. Die Funktion ruft sich selber erneut auf.

Mit Tk().after() kannst du Aufgaben planen, ohne dass sie den Haupt Thread blockieren.

Hier gibt es die Doku zu dieser Methode. Die Wartezeit könnte theoretisch auch länger als die angegebene Zeit sein. Auch deine Methode wird langfristig etwas falsch zählen, da immer mindestens eine Sekunde gewartet wird und danach noch der Programmcode dazwischen kommt.


LR6549 
Beitragsersteller
 31.05.2022, 19:03

<3