2016-11-12 29 views
0

これは、ボタンを押すとラジオボタンを生成するボタンに由来します。私はラジオボタンで作られた選択肢にアクセスすることができません。すべて正常に動作しますが、選択した関数の出力はゼロです。私はローカルとグローバルの両方のvarを使用してみますが、結果は同じです。Python tkinter RadioButtonコールバック関数

def callback_st(): # RadioButton select technology 
    var = IntVar() 
    m=0 
    for m in range(len(un_tech)): 
     Radiobutton(radio_frame, text=un_tech[m], value=m, variable=var, 
        command=selected(var)).pack(anchor=W) 

def selected(var): 
    print(var) 

これは機能しません。私は、ラムダを使用して解決:

def selected(jst): 
     global sel_technology 
     sel_technology=un_tech[jst] 
     print(sel_technology) 

def callback_st(): #RadioButton select technology 
    var_st = IntVar() 
    m=0 
    for m in range(len(un_tech)): 
    Radiobutton(radio_frame, text=un_tech[m], value=m, variable=var_st, 
       command = lambda jst=m: selected(jst)).pack(anchor=W) 

私が望むように、これは動作しますが、それは私が欲しいと私は正しい方法ではないと思いソリューションではありません。だから、誰かが正しい方法を見つけるのを助けることができますか?あなたの最初の試みで

+0

ローカル変数とグローバル変数の概念に精通していますか? 'var'はローカル変数です。 –

答えて

1

、あなたはコールselectedすぐに、var0の値があるとき。あなたはラムダ式でこれを避けましたが、これは当初の間違いに対する厄介な回避策であるということは間違いありません。 varをグローバルにし、selectedにグローバルとしてアクセスさせます。最初のコードを変更する:

var = IntVar() 
def selected(): 
    print(var.get()) 
def callback_st(): 
    ... 
     ...command=selected... 

クラスとメソッドを定義していた場合、varはグローバルではなくインスタンス属性になります。

関連する問題