>백엔드 개발 >파이썬 튜토리얼 >Tkinter 버튼의 \'Command\' 매개변수가 선언 시 실행되는 이유는 무엇입니까?

Tkinter 버튼의 \'Command\' 매개변수가 선언 시 실행되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-19 07:57:30618검색

Why Does the

선언 시 버튼 매개변수 "Command" 실행: 해결됨

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

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