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 중국어 웹사이트의 기타 관련 기사를 참조하세요!