Tkinter For 루프에서 버튼 매개변수 중복 극복
Tkinter에서 for 루프를 통해 버튼을 생성하면 매개변수 할당이 적절할 경우 예상치 못한 동작이 발생할 수 있습니다. 구현되지 않았습니다. 다음 코드 조각을 고려해보세요.
users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"} row = 1 for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda: self.a(name)) user_button.grid(row=row, column=0) row += 1
의도된 결과는 각 버튼이 사용자 사전에서 고유한 매개변수를 수신하는 것입니다. 그러나 아무 버튼이나 누르면 사전(예: "Test2")의 마지막 값만 인쇄됩니다.
이 문제는 람다 표현식이 루프 전체에서 동일한 이름 변수를 사용하기 때문에 발생합니다. 반복할 때마다 이전 값을 덮어쓰고 람다에는 루프에서 마지막으로 할당된 이름이 남습니다.
해결책: Lambda의 기본 키워드 매개 변수
이 문제를 해결하려면 다음을 수행합니다. 람다 표현식에 기본 키워드 매개변수를 사용하세요. 수정된 코드는 다음과 같습니다.
for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
name 변수의 현재 값을 람다의 name 키워드 인수에 명시적으로 바인딩함으로써 람다는 각 버튼에 대해 올바른 매개 변수를 유지합니다. 이제 버튼을 누를 때마다 원하는 고유 매개변수 출력이 트리거됩니다.
이 기술은 각 버튼이 for 루프 내에서 의도한 매개변수 할당을 유지하도록 효과적으로 보장합니다.
위 내용은 For 루프를 사용하여 Tkinter 버튼 생성 시 매개변수 중복을 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!