tkinter에서 Button 위젯의 "command" 매개변수는 버튼이 실행될 때 콜백을 실행하기 위한 것입니다. 눌렀습니다. 그런데 콜백 함수가 버튼을 클릭할 때가 아니라 선언하자마자 바로 실행되는 이유가 의아합니다.
핵심은 인스턴스 생성 중 매개변수 평가에 있습니다. 함수를 "명령" 매개변수로 전달할 때 Python은 먼저 함수를 평가하고 괄호 안에 전달된 인수를 사용하여 함수를 호출합니다. 예를 들어 다음 코드에서는
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
코드가 Hello 함수를 호출하여 return 문이 없기 때문에 None 값을 반환하고 이 None 값을 "command" 매개 변수로 전달합니다. 단추. 결과적으로 버튼을 클릭할 때 콜백이 실행되지 않고 초기 평가에서 "안녕하세요!"가 인쇄됩니다.
이 문제를 수정하고 버튼을 클릭할 때만 콜백이 실행되도록 하려면 함수를 전달하세요. 괄호 없이 자체적으로:
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
이 수정은 Hello 함수를 버튼 클릭 시 호출되는 호출 가능한 개체로 유지합니다.
함수 개체와 해당 반환 값 간의 근본적인 차이점 이해 이 맥락에서 매우 중요합니다. 함수 개체는 function_name으로 참조되는 반면, function_name()은 반환 값을 나타냅니다. 전자는 호출 가능하지만 후자는 함수 호출의 결과입니다.
본질적으로 버튼의 "명령" 매개변수를 정의할 때 조기에 발생하지 않도록 반환 값이 아닌 함수 객체를 전달하는 것이 필수적입니다. 실행. 이러한 구별을 통해 버튼 클릭 시 원활한 콜백 기능이 가능해집니다.
위 내용은 Tkinter 버튼의 'Command' 매개변수가 선언 시 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!