tkinter countdown

  • Hallo,

    ich wollte mir ein einfaches Skript schreiben, das von 60 herabzählt und die Zahl in einem tkinter-Fenster anzeigt . Wenn ich es mit einem Button mache, der immer eine ganze Zahl abzieht klappt es.

    Aber sobald ich so etwas probiere, klappt es nicht mehr.

    Es bleibt das Fragezeichen. Wenn ich mit "Strg + C" abbreche steht da bspw. 42.

    Kann mir jemand einen Tipp geben, warum es nicht angezeigt wird?


    Gruß, Tom

  • das liegt daran, dass das Script die Schleife in der Funktion count abarbeitet und während der Abarbeitung von (Python-)Kommandos wird die tkinter-GUI nicht aktualisiert. Das ist im Übrigen bei den meisten GUI-Toolkits so, nicht nur bei tkinter. Bei Visual Basic z.B. löst man das mit dem Kommando DoEvents, hier bei Python mit

    window.update()


    Code
    def count():
        for i in range(60,-1,-1):
            Zahl.config(text=i)
            window.update() # hier der tkinter-Oberfläche Zeit geben, seine Ereignisse abzuarbeiten...
            sleep(1)
  • Hallo,


    wie schon gesagt: while-Schleife im Mainloop einer GUI ist immer ein No-Go.


    Ansonsten solltest du - und ich glaube, dass Thema hatten wir schon mal - die GUI eine Klasse packen. Das macht _immer_ Sinn ausser bei mega-trivialen GUIs. Im gegeben Fall würde dann auch das `global` eliminiert, weil `counter` ein Attribut der Klasse wäre.

    Und keine Sternchen-Importe verwenden, weil du dir den globalen Namensraum zu müllst. Bei `from tkinter import *` sind das ca. 140 Klassen, Konstanten, etc., die du importierst.


    Wenn der Countdown automatischen laufen soll, brauchst du die `after` Methode.


    Gruß, noisefloor