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.
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.