如何在列表中执行tk.Variable的回调

时间:2014-12-19 13:41:26

标签: python callback tkinter

我在GUI中使用了tk变量列表。如何使回调使用被跟踪的tk.Variable的i-Value?

 def callback(a,b,c):
     print 'i+2'

 ButtonsList=[]
 VarList=[]

 i=0
 while i<30:

     VarList.append(tk.BooleanVar())
     VarList[i].trace('w',callback)

     ButtonsList.append(tk.Checkbutton(root, text="This is a CB",variable=VarList[i]))
     ButtonsList[i].place(x=x,y=i*20)
     i+=1

1 个答案:

答案 0 :(得分:1)

您可以将回调包装在lambda中,该lambda会为函数调用添加其他参数。

def callback(a,b,c,idx):
    print 'i+2'

#later on in the program:
VarList[i].trace('w', lambda a,b,c,i=i: callback(a,b,c,i))

注意lambda中的i=i。这对于在注册回调后其值发生变化的变量是必需的。没有它,i将始终为30,无论您单击哪个Checkbutton。