2016-05-24 6 views
0

Das Attribut textvariable beim Erstellen einer Combobox in tkinter scheint völlig nutzlos. Kann jemand bitte erklären, was der Zweck ist? Ich schaute in der Tcl-Dokumentation und es heißt textvariable wird verwendet, um einen Standardwert zu setzen, aber es sieht aus wie in tkinter Sie würden einfach die .set Methode verwenden, um das zu tun.Python tkinter: Die Verwendung einer "textvariablen" in einer Combobox scheint nutzlos

Beispiel zeigt, was ich meine:

Dies funktioniert nicht ...

from Tkinter import * 
import ttk 

master = Tk() 

test = StringVar() 
country = ttk.Combobox(master, textvariable=test) 
country['values'] = ('USA', 'Canada', 'Australia') 
country.pack() 

# This does not set a default value... 
test="hello" 

mainloop() 

funktionierts.

from Tkinter import * 
import ttk 

master = Tk() 

country = ttk.Combobox(master) 
country['values'] = ('USA', 'Canada', 'Australia') 
country.pack() 

# This does set a default value. 
country.set("hello") 

mainloop() 

Wenn Sie sollen nur die .set und .get Methoden verwenden, was ist der Punkt, der etwas zu textvariable zuweisen? Jedes Online-Beispiel scheint textvariable zu verwenden, aber warum? Es scheint völlig sinnlos.

Antwort

2

Unter normalen Umständen gibt es keinen Grund zu verwenden, um eine StringVar. Ich habe keine Ahnung, warum die meisten Tutorials es zeigen. Es fügt Overhead hinzu, bietet aber keinen zusätzlichen Wert. Wie Sie sehen, können Sie den Wert der Combobox direkt über das Combobox-Objekt selbst abrufen und festlegen.

Der Vorteil der Verwendung einer StringVar kommt, wenn Sie entweder a) zwei Widgets die gleiche Variable teilen wollen, so dass eine aktualisiert wird, wenn die andere geändert wird, oder b) eine oder mehrere Spuren an die StringVar anhängen. Beide sind ungewöhnlich, aber manchmal sehr nützlich.

+0

Jetzt macht es Sinn. Das ist die Art von Erklärung, nach der ich gesucht habe. Danke Bryan! – tjwrona1992

1

Da Python keine Typsicherheit besitzt, überschreiben Sie den Verweis auf das Objekt StringVar mit einer Zeichenfolge. Um den Wert zu setzen, rufen Sie die set Methode:

test = StringVar() 
country = ttk.Combobox(master, textvariable=test) 
#... 
test.set("hello") 
+0

Okay, das macht mehr Sinn. Warum nicht einfach Set auf dem Combobox-Objekt selbst verwenden? Ich sehe immer noch nicht den Sinn, die zusätzliche Variable hinzuzufügen. – tjwrona1992

+0

Die Variable wird aktualisiert, wenn sich der Inhalt der Combobox ändert und umgekehrt. Dies erleichtert das Nachverfolgen von Änderungen. – Squall

+0

Um nach einer Änderung zu suchen, müssen Sie 'test.get()' ausführen, was genau das gleiche Ergebnis wie 'country.get() 'ergibt. Würden nicht beide Methoden das gleiche Ergebnis liefern? Ich verstehe immer noch nicht ganz, wie es einfacher ist, Änderungen zu verfolgen. – tjwrona1992