Was macht StringVar?

Fragen zu Tkinter.
Antworten
123anna
User
Beiträge: 3
Registriert: Freitag 2. Januar 2015, 13:49

Hallo miteinander,
bin Pythonanfängerin und habe eine Frage:

was macht in dem Programm die Zeile "Objektvariable = StingVar(F)"?
und was genau ist überhaupt "Objektvariable"?

erstellt wird hier eine Auswahlliste in dem Hauptfenster F und der Canvas L.

und so sieht der Programmabschnitt aus:

Code: Alles auswählen

Label (F, text="Stadt:").grid()
Stadt = ["Bochum", "Wilhelmshaven", "München"]
Objektvariable = StringVar(F)
Objektvariable.set(Stadt[0])
OptionMenu(F, Objektvariable, *Stadt, command=berechne).grid()
Vielen Dank für jede Hilfe!
Freundliche Grüße
Zuletzt geändert von Anonymous am Freitag 2. Januar 2015, 14:51, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@123anna: Die Zeile erstellt einen Wert vom Typ `Tkinter.StringVar`. Der Name `Objektvariable` ist dafür nicht wirklich gut weil absolut nichtssagend. Genau wie `F` und `L`, gewöhn dir bloss gar nicht erst an solche schlechten Namen zu verwenden. Wenn die `fenster` und `leinwand` heissen, dann muss man nicht extra erklären wofür die Werte stehen weil man es am Quelltext selber ablesen kann und zwar überall wo der Wert namentlich verwendet wird. Du solltest Dich ausserdem an die Namenskonventionen aus dem Style Guide for Python Code halten, dann kann man auch Klassen einfacher von anderen Werten unterscheiden.

Die von `Tkinter.Variable` abgeleiteten Typen wie `StringVar` kapseln einen Wert den man mit `get()` und `set()` auslesen und setzen kann und der Wert wird einerseits von Widgets aktualisiert wo man solche `Variable`-Typen übergeben kann und umgekehrt aktualisiert das setzen den Wert im Widget. In diesem Fall wird der Wert von dem `OptionMenu` aktualisiert wenn der Benutzer eine Option auswählt. Das wird in der Dokumentation von Python kurz anhand eines `Entry`-Widgets demonstriert. Für detailliertere Informationen muss man in einer der umfangreicheren Tk-Dokumentationen nachlesen auf welche in der Python-Dokumentation verwiesen wird.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Hier mal ein Beispiel zum experimentieren:

Code: Alles auswählen

''' tk_tkstringvar_optionmenu102.py
using Tkinter's Optionmenu() as a combobox
allows one item to be selected
use tk.StringVar() do update string values
explores three different ways to update the selection
'''

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk

def show_choice(name, index, mode):
    """automatic update"""
    sf = "value is %s" % root.globalgetvar(name)
    # display update value in root window top frame
    root.title(sf)

def update_label():
    """update only after button click"""
    sf = "label2 text = %s" % stadt.get()
    label2["text"] = sf

root = tk.Tk()
root.title("Option Menu")

choices = ["Bochum", "Wilhelmshaven", "München", "Stuttgart"]

stadt = tk.StringVar(root)
# optionally preselect a choice (element 2)
stadt.set(choices[2])

stadt_option = tk.OptionMenu(root, stadt, *choices)
stadt_option.pack(padx=70, pady=20)

# one way to update selected option choice
stadt.trace('w', show_choice)

# another way textvariable --> automatic update of label text
label = tk.Label(root, textvariable=stadt)
label.pack()

# one more way, needs button click to update stadt choice
button = tk.Button(root, text="Update Label below", command=update_label) 
label2 = tk.Label(root, text="--------")
button.pack(pady=20)
label2.pack()

root.mainloop()

Atomkraftwerkaktienbesitzer
Antworten