2017-12-02 7 views
0

필자는 내 목록의 길이 인 compkeys에 따라 많은 양의 버튼을 만드는 tkinter의 for 루프를 가지고있다. 각 버튼을 만들 때 하나의 입력을받는 이전에 만들어진 함수가 제공됩니다. for 루프의 반복에 해당하는 함수의 입력을하려고합니다. 예를 들어, 루프에서 생성 된 첫 번째 버튼은 해당 함수의 입력으로 list comp 키의 첫 번째 항목을 가져야합니다.Tkinter의 for 루프에서 생성 된 버튼에 함수 할당

그러나 각 단추는 반복 횟수에 따라 x의 값 대신 x의 최종 값만 입력합니다. 일체의 도움을 주셔서 감사합니다 :)

import tkinter 

compkeys = [2017onsc, 2017onwat] 

for x in range(len(compKeys)): 
    compButton = Button(root, text = compKeys[x], command=lambda: compBuDef(compKeys[x])) 
    compButton.place(x=x * 100 + 200, y=300) 

답변

1

당신은 람다 함수를 통해 매개 변수를 전달해야합니다

for x in range(len(compKeys)): 
    compButton = Button(root, text=compKeys[x], command=lambda z=compKeys[x]: compBuDef(z)) 
    compButton.place(x=x*100+200, y=300) 

이상은, 요소의 반복 :

for idx, ckey in enumerate(compKeys): 
    compButton = Button(root, text=ckey, command=lambda z=ckey: compBuDef(z)) 
    compButton.place(x=idx*100+200, y=300) 
+0

이 많은 감사. 종료. –

+0

당신은 환영합니다, 내가 도울 수있어서 기쁩니다. 내 대답이 당신을 도왔다 고 생각한다면, 당신은 [누군가 내 질문에 답할 때 무엇을해야하는지] 고려할 수 있습니다. (https://stackoverflow.com/help/someone-answers) [ 내 대답을 수락하는 방법] (http://meta.stackexchange.com/a/5235) –