Animation mit einem Timer

Zielsetzung

Oft wünscht man, dass ein Programm in festgelegten Zeitabständen selbstständig Aktionen ausführt und die grafische Benutzeroberfläche immer entsprechend anpasst.

Ein einfaches Beispiel wäre ein Countdown-Zähler, der nach jeweils 1 Sekunde um 1 verringert wird, bis der Zählerstand 0 erreicht ist.

AnwendungsfensterAnwendungsfensterAnwendungsfenster

Realisierung mit der after-Methode

Der folgende Quelltextauszug zeigt, wie man ein GUI-Objekt veranlassen kann, eine Prozedur nach einer vorgegebenen Zeit wiederholt auszuführen.

from tkinter import *

# Ereignisbehandlung
def buttonCountdownClick():
    stand = int(labelZahl.cget('text'))
    if stand > 0:
        # Zähler aktualisieren
        stand = stand - 1
        labelZahl.config(text=str(stand))
        tkFenster.after(1000, buttonCountdownClick)

# Fenster
tkFenster = Tk()
tkFenster.title('Countdown')
tkFenster.geometry('170x125')
# Label
labelZahl = Label(master=tkFenster, text='10', bg='gray', font=('Arial', 36))
labelZahl.place(x=5, y=5, width=160, height=80)
# Button
buttonCountdown = Button(master=tkFenster, text='countdown', bg='#FBD975',
                         command=buttonCountdownClick)
buttonCountdown.place(x=5, y=90, width=160, height=30)
# Aktivierung des Fensters
tkFenster.mainloop()

Jedes tkinter-GUI-Objekt kann die Methode after ausführen. Diese Methode bewirkt, dass nach der übergebenen Zeit (in ms) die übergebene Prozedur ausgeführt wird. Ruft man mit Hilfe der Methode after eine Prozedur rekursiv auf, so ergibt dies eine wiederholte Ausführung einer Prozedur.

Aufgabe 1

Ändere die GUI zur Ampel (siehe Eine Leinwand für Grafiken) so ab, dass die Ampel selbstständig weiterschaltet.

Anwendungsfenster
X

Fehler melden

X

Suche