2016-01-23 55 views
0

我想通過將1或0(作爲整數)傳遞給此函數來設置checkbutton的值。但是,checkbutton的狀態沒有變化。請幫忙。檢查按鈕值常量

def change_On_Off_state(*args): 
     CheckVar1 = IntVar() 
     CheckVar1.set(*args) 
     OnOff = Checkbutton(label2, text = "On", variable = CheckVar1, onvalue = 1, offvalue = 0, height=1, width = 10,anchor = W, bg='Light Blue') 
     OnOff.grid(row = 4, column = 2, padx = 10, sticky = W) 
     #CheckVar1.trace_variable("w", On_Off_state) 
+0

每次需要更改狀態時,您都不必創建新的Checkbutton和新的IntVar。這樣你在一個網格單元中有許多'Checkbutton' - 一個「Checkbutton」在另一個單元格之上。 – furas

回答

0

可能的問題是,因爲CheckVar1是局部變量,當你離開的功能它不存在。

使用全局變量,它將工作。

from tkinter import * 

# --- functions --- 

def change_On_Off_state(*args): 
    CheckVar1.set(*args) 
    OnOff = Checkbutton(root, text="On", variable=CheckVar1, onvalue=1, offvalue=0, height=1, width=10, anchor=W, bg='Light Blue') 
    OnOff.grid(row=4, column=2, padx=10, sticky=W) 
    #CheckVar1.trace_variable("w", On_Off_state) 

# --- main ---- 

root = Tk() 

CheckVar1 = IntVar() # global 

change_On_Off_state(1) 

# "start the engine" 
root.mainloop() 

我認爲你不必創建新的Checkbutton()來改變狀態。僅創建CheckbuttonCheckVar一次,並且只使用`CheckVar1.set(...)多次。

from tkinter import * 

# --- functions --- 

def change_On_Off_state(*args): 
    CheckVar1.set(*args) 
    #CheckVar1.trace_variable("w", On_Off_state) 

def change_on_button_press(): 
    if CheckVar1.get() == 1:  
     CheckVar1.set(0) 
    else: 
     CheckVar1.set(1) 

# --- main ---- 

root = Tk() 

# create only once 
CheckVar1 = IntVar() # global 

# create only once 
OnOff = Checkbutton(root, text="On", variable=CheckVar1, onvalue=1, offvalue=0) 
OnOff.grid() 

# use many times 
change_On_Off_state(1) 

# use button to on/off checkbutton 
btn = Button(root, text="On/Off", command=change_on_button_press) 
btn.grid() 

# "start the engine" 
root.mainloop()