2011-08-12 6 views
1

10 개의 버튼을 만들고 버튼 텍스트의 라벨이 1에서 10까지입니다. 다음 코드는 10 개의 버튼과 라벨을 올바르게 만듭니다. 그러나 모든 버튼의 출력으로 9를 인쇄하고 있습니다. ') PRNT (I'입니다 : 내가 그것을 할 것으로 기대하는 것은 예를 들어 사용자가 다음 2.Python Tk 다중 버튼 생성 문제

def create(): 
for i in range (1,10): 
    lst.insert(i,Button(text=i,command=lambda: prnt(i)).pack()) 

(주 인쇄해야 버튼이 누를 때 그래서, 화면에있는 버튼의 해당 번호를 인쇄하는 것입니다 'lst'는 생성 된 버튼을 저장하는리스트입니다.)

출력에서 ​​프로그램은 함수의 인수로 최신 i 값을 사용한다고 말할 수 있습니다. 사용자가 버튼을 누르기 때문에 각 버튼에 대해 10 줄의 코드를 작성하지 않고 어떻게 해결할 수 있을까요?

답변

2

(람다로 지정된 인자 주)을 시도

def create(): 
    for i in range (1,10): 
        lst.insert(i,Button(text=i,command=lambda i=i : prnt(i)).pack()) 

이 로컬 변수로 람다 I의 값을 전달한다. 이 기능이 없다면 원래 변수에 대한 참조를 사용하고 있습니다. 원래 변수에 저장된 내용으로 항상 변환됩니다.

+0

고맙습니다. 문제가 해결되었습니다. 저는 파이썬을 처음 사용하고 람다를 어떻게 사용하는지 알지 못하고 람다를 사용하고있었습니다. 도움을 다시 주셔서 감사합니다 :) – Alphaceph