2014-12-19 3 views
0

Я использую список переменных tk в моем графическом интерфейсе. Как сделать обратный вызов использовать значение i отслеживаемого tk.Variable?Как сделать обратный вызов tk.Variable внутри списка

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 
+0

Я не думаю, что это причина вашей проблемы, но у вас есть несоответствующие кавычки на 'text =. Это CB''. – Kevin

+0

@Kevin. Я обновил исправление. – Hangon

ответ

1

Вы можете обернуть свой обратный вызов в лямбда, который добавляет дополнительные аргументы в вызов функции.

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)) 

Обратите внимание на i=i в лямбда. Это необходимо для переменных, значение которых изменяется после регистрации обратного вызова. Без него i всегда будет 30, независимо от того, на какую кнопку вы нажимаете.

+0

спасибо за его решение! Я прочитаю о лямбде, чтобы ознакомиться! – Hangon

Смежные вопросы