1.3 Callback-Funktionen
Im Unterschied zu den bisherigen Programmen setzt sich das folgende Programm und alle weiteren Programme im meistens aus zwei Teilen zusammen.
- Einer grafischen Benutzeroberfläche mit dem Hauptfenster.
- Einer Funktion oder mehrerer Funktionen.
Eine Callback-Funktion ist eine spezielle Python-Funktion[1], die auf das Ereignis eines Mausklicks auf das Button-Widget reagiert, sodass durch die Anweisung »command« die Funktion aufgerufen und ausführt wird.
Programm »funktion.py«
Das Programm »funktion.py«:
- erzeugt eine grafische Benutzeroberfläche – das Hauptfenster auf dem ein Label-Widget und zwei Button-Widgets platziert sind
- enthält die Callback-Funktion »buttonClick«
In den Abbildungen 1 und 2 ist zu sehen, was das Programm »funktion.py« vor und nach dem Mausklick auf den Button »Funktion aufrufen« ausgibt.
- Auf dem Hauptfenster sind ein Label-Widgets und zwei Button-Widgets untereinander platziert.
- Das Button-Widget mit dem Schriftzug »Funktion aufrufen« dient dem Aufruf der im Programm definierten Callback-Funktion »buttomClick«.
- Das andere Button-Widget mit dem Schriftzug »Programm beenden« dient dem Beenden des Programms.
- Beide Buttons reagieren auf Mausklicks.
import tkinter as tk
# Callback-Funktion
def buttonClick():
label.config(\
text="Die Callback-Funktion wurde ausgeführt.")
button1.config(state=tk.DISABLED)
# grafische Benutzeroberfläche
root=tk.Tk()
root.title("Callback-Funktion")
root.geometry("400x200")
root.resizable(False, False)
# Widgets
label=tk.Label(root,\
text="Mit der Maus auf den Button klicken!")
button1=tk.Button(root, text="Funktion aufrufen",\
command=buttonClick)
button2 = tk.Button(root, text="Programm beenden",\
command=root.destroy)
label.pack(pady=30)
button1.pack(pady=10)
button2.pack(pady=10)
root.mainloop()
| 3., 9. und 15. Zeile | In den Zeilen stehen Kommentare zum Verstehen des Quelltexts. |
| 4. bis 7. Zeile | Die Callback-Funktion »buttonClick« wird deklariert. |
| 5. und 6. Zeile |
Auf dem Hauptfenster der Benutzeroberfläche wird der Text »Die Callback-Funktion wurde ausgeführt.«
auf das Label-Widget geschrieben.
|
| 7. Zeile |
Das Button-Widget mit der Aufschrift »Funktion aufrufen« wird deaktiviert.
|
| 11. Zeile | Das Hauptfenster erhält den Titel »Callback-Funktion«. |
| 12. Zeile |
Das Hauptfenster der grafischen Benutzeroberfläche erhält die Größe 400x150 Pixel.
|
| 16. und 17. Zeile | Das Label-Widget mit der Aufschrift »Mit der Maus auf den Button klicken!« wird erzeugt. |
| 18. und 19. Zeile | Das Button-Widget mit der Aufschrift »Funktion aufrufen!« wird erzeugt. |
| 12. und 21. Zeile | Das Button-Widget mit der Aufschrift »Programm beenden« wird erzeugt. |
| 23. bis 25. Zeile | Das Label-Widget und die Button-Widgets werden als Elemente auf dem Hauptfenster platziert. |
Aufgabe A8
Übertrage den Programm-Quelltext auf den Computer.
Führe das Programm am Computer aus.
Programm »frage.py«
Das Programm:
-
erzeugt eine grafische Benutzeroberfläche – das Hauptfenster auf dem zwei Label-Widgets, ein Entry-Widgets
und zwei Button-Widgets platziert sind
Abbildung 3 und 4: Hauptfenster vor und nach dem Button-Klick »Eine Frage?« - enthält die Callback-Funktion »frage«
import tkinter as tk
# Callback-Funktion
def frage():
vorname=entry.get()
if vorname!="":
label2.config(\
text=f"{vorname}, möchtest du programmieren?")
button1.config(state=tk.DISABLED)
# grafische Benutzeroberfläche
root=tk.Tk()
root.title("Frage")
root.geometry("400x300")
root.resizable(False, False)
# Widgets
label1=tk.Label(root,\
text = "Gib bitte deinen Vornamen ein:")
entry=tk.Entry(root, width=10)
button1=tk.Button(root, text="Eine Frage?", command=frage)
label2=tk.Label(root)
button2=tk.Button(root, text="Programm Beenden",\
command=root.destroy)
label1.pack(pady=30)
entry.pack(pady=10)
button1.pack(pady=10)
label2.pack(pady=10)
button2.pack(pady=10)
root.mainloop()
| 4. bis 9. Zeile | Die Callback-Funktion »frage« wird deklariert. |
| 5. Zeile |
Im Entry-Widgets erfolgt die Benutzereingaben des Wertes für die Variable |
| 6. bis 9. Zeile |
Die if-Anweisung ist eine einfache Auswahl mit einem Bedingungszweig.
|
| 9. Zeile |
Das Button-Widget mit der Aufschrift »Eine Frage?« wird deaktiviert.
|
Aufgabe A9
Implementiere das Programm-Quelltext am Computer.
Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.
- [1] Im Abschnitt 3.4 erfolgt weiteres zum Thema Funktionen.