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.
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.
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.
Interessant wäre auch, die Gesamtanzahl der Wiederholungen und den durchschnittlichen Gewinn jeweils anzuzeigen.