i

Datenverwaltung mit Kontrollvariablen

Zur Orientierung

Kontrollvariablen werden an Attribute von GUI-Objekten angebunden. Mit dieser Anbindung kann man direkt auf Daten einer GUI-Komponente zugreifen und sie gegebenenfalls auch verändern. Wir verdeutlichen dies mit zwei sehr einfachen Beispielen.

Beispiel 1: Austausch von Daten

Der im Eingabefeld eingegebene Text soll in verschiedenen Schriftgrößen direkt auf Schriftfeldern angezeigt werden.

Anwendungsfenster

Im folgenden Programm wird die Kontrollvariable text zum Datenaustausch benutzt.

from tkinter import *
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x130')
# Rahmen Eingabe
frameEingabe = Frame(master=tkFenster, bg='#FFCFC9')
frameEingabe.place(x=5, y=5, width=110, height=35)
# Rahmen Ausgabe
frameAusgabe = Frame(master=tkFenster, bg='#D5E88F')
frameAusgabe.place(x=5, y=45, width=110, height=80)
# Kontrollvariable
text = StringVar()
# Entry Text
entryText = Entry(master=frameEingabe, bg='white', textvariable=text)
entryText.place(x=5, y=5, width=100, height=20)
# Label Text
labelText1 = Label(master=frameAusgabe, bg='white', font=('Arial', 8), textvariable=text)
labelText1.place(x=5, y=5, width=100, height=20)
labelText2 = Label(master=frameAusgabe, bg='white', font=('Arial', 12), textvariable=text)
labelText2.place(x=5, y=30, width=100, height=20)
labelText3 = Label(master=frameAusgabe, bg='white', font=('Arial', 16), textvariable=text)
labelText3.place(x=5, y=55, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Mit der Anweisung text = StringVar() wird die Kontrollvariable erzeugt. Diese Kontrollvariable ist keine Variable im herkömmlichen Sinn. Es handelt sich hier vielmehr um ein Objekt, das eine Zeichenkette verwaltet.

Mit textvariable=text wird diese Kontrollvariable an ein Entry- bzw. Label-Objekt angebunden.

Wenn der Benutzer Zeichen in das Eingabefeld eingibt, dann ändert sich der Wert der angebundenen Kontrollvariablen. Diese Änderung wirkt sich sofort auch auf die Anzeige der Label-Objekte aus, die an dieselbe Kontrollvariable angebunden sind.

Aufgabe 1

Probiere das selbst einmal aus.

Beispiel 2: Veränderung von Kontrollvariablen

Hier wird die im Schriftfeld vorgegebene Zahl bei jedem Klick auf den Button um 1 erhöht.

Anwendungsfenster

Auch hier wird die Kontrollvariable text zum Datenaustausch benutzt.

from tkinter import *
# Ereignisverarbeitung
def buttonVerarbeitenClick():
    zahl = int(text.get())
    zahl = zahl+1
    text.set(str(zahl))
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x75')
# Rahmen Label
frameLabel = Frame(master=tkFenster, bg='#FFCFC9')
frameLabel.place(x=5, y=5, width=110, height=30)
# Rahmen Verarbeitung
frameVerarbeitung = Frame(master=tkFenster, bg='#FBD975')
frameVerarbeitung.place(x=5, y=40, width=110, height=30)
# Kontrollvariable
text = StringVar()
text.set('0')
# Button 
buttonVerarbeiten = Button(master=frameVerarbeitung, text='weiter', command=buttonVerarbeitenClick)
buttonVerarbeiten.place(x=5, y=5, width=100, height=20)
# Label Text
labelText = Label(master=frameLabel, bg='white', textvariable=text)
labelText.place(x=5, y=5, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Mit der get-Methode kann man auf den Wert einer Kontrollvariable zugreifen.

Mit der set-Methode kann man den Wert einer Kontrollvariable gezielt setzen.

Aufgabe 2

Experimentiere selbst mit Kontrollvariablen.

Typen von Kontrollvariablen

In den Beispielen oben wurden Kontrollvariablen zur Verwaltung von Zeichenketten benutzt. Es gibt auch die Möglichkeit, andere Daten zu verwalten.

Objekt-Typ Beschreibung
StringVar Verwaltung einer Zeichenkette
IntVar Verwaltung einer ganzen Zahl
DoubleVar Verwaltung einer Gleitkommazahl
BooleanVar Verwaltung eines Wahrheitswerts

Wir werden Kontrollvariablen im Abschnitt Auswahl mit Radiobutton benutzen, um Radiobuttons zu verwalten.

Suche

v
9.1.4.10
www.inf-schule.de/software/gui/entwicklung_tkinter/kontrollvariablen
www.inf-schule.de/9.1.4.10
www.inf-schule.de/@/page/ZJje81aNguxsN3x3

Rückmeldung geben