2017-08-17 29 views
1

ttk:entryから値を取得しようとしています。私は次のコードを持っています。ttkから値を取得する方法:エントリ

variable DefaultRoot 

ttk::label $wi.custcfg.dlabel -text "Default Root:" 
ttk::entry $wi.custcfg.daddr -width 10 -textvariable ::DefaultRoot -validate focusout -validatecommand { puts $::DefaultRoot; return 1} 

puts $DefaultRoot 

しかし、私はあなたが変数を使うまでは存在しません

global DefaultRoot 
puts $DefaultRoot 

または

puts $::DefaultRoot 
+0

何かがエントリに書き込まれるまでの変数が存在しません。出力アクションをReturnなどのイベントにバインドする必要があります(Returnキーを押したり離したときに発生します)。このように: 'bind $ wi.custcfg.daddr {puts $ :: DefaultRoot}'(プロシージャ名はここのスクリプトよりも優れています)。 –

+0

私はこのようなものを試しました 'ttk :: entry $ wi.custcfg.daddr -width 10 -textvariable :: DefaultRoot -validate focusout -validatecommand {puts $ :: DefaultRoot; return 1} は$ DefaultRoot ' を入れますが、最後のputsにはまだエラーが発生します –

+0

私にとってはうまく動作します。最後のputsが実行されると、まだエントリが使用されていないのでエラーメッセージが表示されますが、テキストが入力されてエントリがフォーカスを失うとすぐに、検証スクリプトのputsは正常に動作します。変数を自分で作成する(つまり値を与える)まで、最後の行のputsが動作することは期待できません。 –

答えて

1

上のエラーを取得していますそれを何らかの価値に設定してください。変数(例:variable DefaultRoot)として宣言するだけでは、それが湧き出ることはありません。

投稿したコードでは、入力ウィジェットを作成した後、約マイクロ秒後に最後のputsを実行しています。 putsが発生する前に、ユーザーはテキストを入力することはできません。したがって、変数はまだ存在せず、putsは失敗します。

putsを呼び出す前に変数を設定するのが簡単な解決策ですが、これはputsがデフォルト値を出力することを意味します。言い換えれば

、これは「これがデフォルトである」印刷します:

variable DefaultRoot 
set DefaultRoot "this is the default" 
ttk::entry $wi.custcfg.daddr -textvariable ::DefaultRoot 
puts $DefaultRoot 

変数がを作成した後ただし、あなたはどこでもあなたがをしたい$::DefaultRootを使用することができ、あなたの特定の質問に答えるために。例えば

、あなたは次のように値を出力するボタンを作成することができます。

proc print_variable {} { 
    puts "DefaultRoot=$::DefaultRoot" 
} 
ttk::button $wi.custcfg.button -text foo -command print_variable 
+0

私はコードを更新しましたが、それは私のためには機能しませんでした。 –

2

経由でどこからでも変数にアクセスすることができ、最後のプット

関連する問題