Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Animation mit einem Timer

Zielsetzung

Wie sind die Gewinnaussichten beim chuck-a-luck-Spiel? Um das einschätzen zu können, muss man längere Spielserien durchführen. Günstig wäre es, wenn das chuck-a-luck-Programm dies automatisiert durchführen könnte. Der Benutzer gibt im Eingabefeld des Zählers eine Startzahl ein (z.B. 100). Wenn man dann die Schaltfläche mit der Aufschrift Spiele durchführen anklickt, dann werden so viele Spiele Schritt für Schritt durchgeführt und angezeigt, wie die Startzahl es vorgibt.

Anwendungsfenster

Die Operation after

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

from tkinter import *
# Ereignisverarbeitung

def Button_Zaehlen_Click():
    # Verwaltung der Daten
    stand = int(entryZaehler.get())
    if stand > 0:
        # Zähler aktualisieren
        stand = stand - 1
        entryZaehler.delete(0, END)
        entryZaehler.insert(0, str(stand))
        tkFenster.after(1000, Button_Zaehlen_Click)

# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title("Test")
tkFenster.geometry("120x110")
# Rahmen Zähler
frameZaehler = Frame(master=tkFenster,
                     background="#BDE2F3")
frameZaehler.place(x=5, y=5, width=110, height=100)
# Label mit Überschrift für den Zähler
labelUeberschriftZaehler = Label(master=frameZaehler,
                                 text="Zähler",
                                 background="white")
labelUeberschriftZaehler.place(x=5, y=5, width=100, height=20)
# Eingabefeld für den Zähler
entryZaehler = Entry(master=frameZaehler,
                     background="white")
entryZaehler.insert(0, "10")
entryZaehler.place(x=40, y=35, width=30, height=30)
# Button zum Einzahlen
buttonZaehlen = Button(master=frameZaehler,
                       text="Herunterzählen",
                       command=Button_Zaehlen_Click)
buttonZaehlen.place(x=5, y=75, width=100, height=20)

# Aktivierung des Fensters
tkFenster.mainloop()

Wenn man eine Startzahl in das Eingabefeld eingibt und dann die Schaltfläche anklickt, dann wird - im vorliegenden Beispiel jeweils nach 1000 Millisekunden - der Zähler um 1 reduziert.

Test

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

Erweitere das Programm zum chuck-a-luck-Spiel so, dass Spiele wiederholt durchgeführt werden können. Die (normalerweise vom Benutzer einzugebende) Spielzahl soll jeweils vom Programm mit Hilfe des Zufallsgenerator ermittelt werden.

Anwendungsfenster

Interessant wäre auch, die Gesamtanzahl der Wiederholungen und den durchschnittlichen Gewinn jeweils anzuzeigen.

X

Fehler melden

X

Suche