>백엔드 개발 >파이썬 튜토리얼 >루프에서 생성된 여러 Tkinter 버튼에 고유한 인수를 어떻게 전달할 수 있습니까?

루프에서 생성된 여러 Tkinter 버튼에 고유한 인수를 어떻게 전달할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-26 22:06:18685검색

How Can I Pass Unique Arguments to Multiple Tkinter Buttons Created in a Loop?

명령 인수를 사용하여 Tkinter에서 버튼 생성 이해

Tkinter에서 루프 내에 여러 버튼을 생성하는 것은 동적 사용자 인터페이스를 생성하는 데 유용할 수 있습니다. 그러나 버튼에 명령 인수를 전달하면 특히 어떤 버튼을 눌렀는지 구분하려고 할 때 문제가 발생할 수 있습니다.

루프 카운터에 따라 제목이 증가하여 버튼이 생성되는 다음 코드를 고려하세요.

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)

버튼을 클릭할 때 버튼의 식별자(myNum)를 인쇄하려고 하면 문제가 발생합니다. 출력에는 마지막 반복 값인 2가 일관되게 표시됩니다. 이 동작은 버튼이 고유한 제목에도 불구하고 본질적으로 구별할 수 없음을 나타냅니다.

문제 해결

이 문제를 해결하려면 각 버튼이 고유한 i 값을 캡처하도록 해야 합니다. 창조의 시간. 이를 달성하기 위해 람다 함수에 영리한 기술을 사용할 수 있습니다.

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda i=i: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)

람다 함수 내에 i=i 할당을 추가하면 람다 함수에 i의 현재 값을 효과적으로 "동결"할 수 있습니다. 정의되어 있습니다. 이렇게 하면 루프가 완료된 후에도 각 버튼이 고유 식별자를 유지하게 됩니다.

결론

이 기술을 사용하면 루프 내에서 여러 Tkinter 버튼을 동적으로 생성할 수 있습니다. 클릭했습니다. 람다 함수와 클로저의 동작을 이해함으로써 Tkinter 애플리케이션에서 더 많은 제어와 유연성을 얻을 수 있습니다.

위 내용은 루프에서 생성된 여러 Tkinter 버튼에 고유한 인수를 어떻게 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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