>백엔드 개발 >파이썬 튜토리얼 >Tkinter For 루프에서 버튼 명령을 할당할 때 Lambda 폐쇄 문제를 방지하는 방법은 무엇입니까?

Tkinter For 루프에서 버튼 명령을 할당할 때 Lambda 폐쇄 문제를 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-18 07:44:17174검색

How to Avoid Lambda Closure Issues When Assigning Button Commands in a Tkinter For Loop?

Lambda를 사용하는 For 루프의 Tkinter 할당 버튼 명령

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

여기서 의도한 바는 다음과 같습니다. 각 사용자에 대해 고유한 매개변수 값을 가진 버튼을 만듭니다. 그러나 실행되면 모든 버튼은 마지막으로 할당된 name 값으로 a() 메서드를 호출하여 모든 버튼에 "Test2"가 인쇄됩니다.

이 문제를 해결하려면 람다 식. name의 현재 값을 새 매개변수에 할당하면 각 반복에 대해 고유한 함수를 생성할 수 있습니다.

user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))

이렇게 하면 각 버튼에 해당 name 매개변수가 있는 자체 람다 함수 인스턴스가 있습니다. 결과적으로 버튼은 의도한 매개변수를 사용하여 a() 메소드를 올바르게 호출합니다.

위 내용은 Tkinter For 루프에서 버튼 명령을 할당할 때 Lambda 폐쇄 문제를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.