2016-09-11 6 views
-2

に私はtextウィジェットをcheckbuttonを置くが、毎回私は、機能checkbutton_valueが呼び出されるcheckbutton選択して、それがコードの0PythonのTkinterののチェックボタンの値は常に同じ0

パートがある返されます

def callback(): 

    file_name=askopenfilename() 
    column_1rowname,column_name=draw_column(file_name) 

    root = Tk() 
    root.resizable(width=False,height=False) 
    root.wm_title("Column") 


    S = Scrollbar(root,orient="vertical") 
    text=Text(root,width=15,height=10,yscrollcommand=S.set) 
    S.config(command=text.yview) 
    S.pack(side="right",fill="y") 
    text.pack(side="left",fill="both",expand=True) 

    #check the value of the checkbutton 
    def checkbutton_value(): 

     if(var.get()): 

      print 1 
     else: 

      print 0 

    var=BooleanVar() 
    chk = Checkbutton(root, text=column_1rowname[1], variable=var, command=checkbutton_value) 
    text.window_create("end", window=chk) 
    text.config(state=DISABLED) 


errmsg='Error!' 
Button(text='File Open',command=callback).pack(fill=X) 


mainloop() 
+1

お読みくださいhttp://www.stackoverflow.com/help/mcve –

+0

ありがとう。私はそれを変更しました。 –

+0

これは本当にあなたの本当のコードですか?コールバックの中に 'Tk'のインスタンスを作成するのは間違いなく問題です。 –

答えて

0

問題は複数のルートウィンドウがあることです。 Tkのインスタンスを1つだけ作成し、mainloopを正確に1回呼び出す必要があります。追加のウィンドウが必要な場合は、Toplevelのインスタンスを作成します。

各ルートウィンドウ(およびそのすべての子孫、すべての関連するStringVarなど)は、の独立した tclインタープリタを開始します。このウィンドウに関連付けられたウィジェットと変数は、別のtclインタプリタで使用することはできません。あなたの場合、StringVarは最初のルートウィンドウに関連付けられていますが、ウィジェットは2番目のルートウィンドウに関連付けられています。そのようなルートウィンドウ間でデータを共有することはできません。

+0

ありがとうございます。このコードの目的は、まずExcelファイルを開き、次に列を選択します。 –

+0

@wxd:コードの目的は重要ではありません。 2つのルートウィンドウを持つことはできません。ウィジェットは2番目のルートウィンドウにありますが、変数は最初のウィンドウに属しています。 2つのルートウィンドウ間でデータを共有することはできません。 –

+0

コードの構造を変更するための細かい提案はありますか?私はそれが初めてです。ありがとうございます。 –

関連する問題