Datenverwaltung mit GUI-Objekten
Beispiel - Zähler
Wir betrachten einen Zähler mit grafischer Benutzeroberfläche.
Hier der Quelltext zur Erzeugung der gezeigten GUI:
from tkinter import * # Ereignisbehandlung def buttonWeiterClick(): stand = int(labelZahl.cget('text')) stand = stand + 1 labelZahl.config(text=str(stand)) def buttonZurueckClick(): stand = int(labelZahl.cget('text')) if stand > 0: stand = stand - 1 labelZahl.config(text=str(stand)) def buttonNullClick(): stand = 0 labelZahl.config(text=str(stand)) # GUI-Objekte # Fenster tkFenster = Tk() tkFenster.title('Zähler') tkFenster.geometry('170x125') # Label labelZahl = Label(master=tkFenster, text='0', bg='gray', font=('Arial', 36)) labelZahl.place(x=5, y=5, width=160, height=80) # Button buttonWeiter = Button(master=tkFenster, text='weiter', bg='#D5E88F', command=buttonWeiterClick) buttonWeiter.place(x=115, y=90, width=50, height=30) buttonZurueck = Button(master=tkFenster, text='zurück', bg='#FFCFC9', command=buttonZurueckClick) buttonZurueck.place(x=5, y=90, width=50, height=30) buttonNull = Button(master=tkFenster, text='Null', bg='#FBD975', command=buttonNullClick) buttonNull.place(x=60, y=90, width=50, height=30) # Aktivierung des Fensters tkFenster.mainloop()
Aufgabe 1
Analysiere das Programm. "Wer" ist für die Verwaltung des jeweiligen Zählerstands zuständig?
Datenverwaltung
Im Programm oben wird der Zählerstand vom GUI-Objekt labelZahl
verwaltet.
Dem text
-Attribut des labelZahl
-Objekt wird jeweils eine Zeichenkette zugewiesen,
die den aktuellen Zählerstand darstellt. Es handelt sich hier also um eine indirekte Verwaltung des Zählerstands.
GUI-Objekte sind eigentlich nicht für die Datenhaltung einer Anwendung gedacht.
Ihre Aufgabe ist es vielmehr, die Daten von GUI-Komponenten zu verwalten.
Deshalb ist die oben gezeigte Lösung, mit Hilfe eines Label
-Objekts die Zählerdaten
indirekt mitzuverwalten, keine gute Lösung.
Aufgabe 2
Mit einem Programm soll die Anmeldung mit einem Passwort simuliert werden.
Der Benutzer kann mit den Schaltflächen die Buchstaben A, B und C eingeben. Wenn er/sie die Buchstabenkombination richtig eingegeben hat, dann erhält er/sie eine positive, ansonsten eine negative Rückmeldung.
Warum funktioniert bei dieser Anwendung der Ansatz, die Daten zur Anwendung mit GUI-Objekten zu verwalten, nicht mehr?