2016-09-11 13 views
-2

habe ich die checkbutton auf dem text Widget, aber jedes Mal wähle ich eine checkbutton, die Funktion checkbutton_value genannt wird, und es gibt 0 zurückPython tkinter Checkbutton Wert immer gleich 0

Teil des Codes ist:

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

Bitte lesen Sie http://www.stackoverflow.com/help/mcve –

+0

Danke. Ich habe es geändert. –

+0

Ist das wirklich dein richtiger Code? Es ist definitiv ein Problem, eine Instanz von 'Tk' in einem Callback zu erstellen. –

Antwort

0

Das Problem ist, dass Sie mehr als ein Root-Fenster haben. Sie sollten immer genau eine Instanz von Tk erstellen und mainloop genau einmal aufrufen. Wenn Sie zusätzliche Fenster benötigen, erstellen Sie Instanzen von Toplevel.

Jedes Root-Fenster (und alle seine untergeordneten Elemente und alle zugehörigen StringVar s usw.) starten einen neuen, unabhängigen tcl-Interpreter. Widgets und Variablen, die diesem Fenster zugeordnet sind, können nicht in einem anderen Tcl-Interpreter verwendet werden. In Ihrem Fall ist das StringVar mit dem ersten Stammfenster verknüpft, aber das Widget ist mit dem zweiten verknüpft. Sie können Daten zwischen solchen Root-Fenstern nicht teilen.

+0

Danke. Das Ziel dieses Codes ist: Öffnen Sie zuerst eine Excel-Datei, wählen Sie dann die Spalte. –

+0

@wxd: Das Ziel Ihres Codes spielt keine Rolle. Sie können nicht zwei Hauptfenster haben. Ihr Widget befindet sich im zweiten Stammfenster, aber Ihre Variable gehört zur ersten. Sie können keine Daten zwischen zwei Hauptfenstern freigeben. –

+0

Irgendwelche Detailvorschläge, um die Struktur des Codes zu ändern? Ich bin neu dazu. Danke. –

Verwandte Themen