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?