2016-05-24 6 views
0

tkinterでコンボボックスを作成するときにtextvariable属性を使用すると完全に役に立たないようです。誰か目的を説明できますか?私はTclのドキュメントを見て、それはtextvariableがデフォルト値を設定するのに使われていると言いますが、それはtkinterのように、.setメソッドを使っています。Python tkinter:コンボボックスで「textvariable」を使用すると役に立たないようです

これは動作しません...

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() 

これが作業を行います。私が何を意味するかを示す

例。

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() 

あなたがちょうど.set.getメソッドを使用することになっている場合は、textvariableに何を割り当てるのポイントは何ですか?オンラインのすべての例はtextvariableを使用しているようですが、なぜですか?それは完全に意味がないようです。

答えて

2

StringVarを使用する理由はありません。値を設定するには、setメソッドを呼び出します。私はなぜほとんどのチュートリアルがそれを示すのか分かりません。これはオーバーヘッドを追加しますが、余分な価値はありません。ご覧のように、コンボボックスの値を直接取得して、コンボボックスオブジェクト自体を介して設定することができます。

StringVarを使用する利点は、a)2つのウィジェットが同じ変数を共有して、他方が変更されたときに更新されるか、またはb)StringVarに1つ以上のトレースを添付する場合です。どちらも珍しいですが、時には非常に便利です。

+0

これは理にかなっています。それは私が探していたものです。ありがとうブライアン! – tjwrona1992

1

Pythonには型の安全性がないため、StringVarオブジェクトへの参照を文字列で上書きしています。通常の状況下で

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

それはもっと理にかなっています。なぜ、コンボボックスオブジェクト自体にsetを使用しないのですか?私はまだ余分な変数を追加することのポイントが表示されません。 – tjwrona1992

+0

コンボボックスの内容が変更されると変数が更新され、その逆も同様です。これにより、変更を容易に追跡できます。 – Squall

+0

変更を確認するには 'test.get()'を実行する必要があります。これは 'country.get()'とまったく同じ結果を返します。両方の方法で同じ結果が得られるのではないでしょうか?私はそれがどのようにして変更を追跡するのがより簡単かをまだ理解していません。 – tjwrona1992

関連する問題