> 백엔드 개발 > 파이썬 튜토리얼 > 내 Tkinter 버튼이 클릭할 때 대신 생성할 때 명령을 실행하는 이유는 무엇입니까?

내 Tkinter 버튼이 클릭할 때 대신 생성할 때 명령을 실행하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-23 09:46:10
원래의
174명이 탐색했습니다.

Why Does My Tkinter Button Execute Its Command on Creation Instead of On Click?

생성 시 버튼 명령 실행

Tkinter에서 Button 인스턴스가 명령 매개변수로 초기화될 때 관련 기능은 다음과 같습니다. 버튼을 클릭하면 실행됩니다. 그러나 경우에 따라 예상 동작과 달리 버튼 생성 시 명령이 즉시 실행될 수도 있습니다.

코드 예제 분석

다음 코드를 고려하세요.

from Tkinter import *

admin = Tk()
def button(an):
    print(an)
    print('het')

b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()
로그인 후 복사

문제 설명

이 코드를 실행하면 버튼이 제대로 작동하지 않는 것처럼 보입니다. 버튼 클릭 시 버튼 기능을 실행하는 것이 아니라 생성 즉시 'hey', 'het'을 출력합니다.

설명

문제는 명령을 실행하는 방식에 있습니다. 매개변수를 초기화하는 중입니다. 라인:

command=button('hey')
로그인 후 복사

은 버튼('hey') 함수 호출의 결과를 명령 매개변수에 전달합니다. 이는 다음과 동일합니다:

result = button('hey')
command=result
로그인 후 복사

button('hey') 함수가 즉시 실행되어 결과를 반환하므로 명령은 함수 참조 자체가 아닌 결과로 설정됩니다. 결과적으로 버튼을 눌렀을 때가 아닌 바로 함수가 실행됩니다.

해결책

이 문제를 해결하려면 버튼에 대한 참조를 전달해야 합니다. 실행하지 않고 기능을 수행합니다. 이렇게 하려면 명령 매개변수를 초기화할 때 괄호를 생략하면 됩니다.

command=button
로그인 후 복사

추가 참고 사항

  • 함수 전달 간의 차이점을 이해하는 것이 중요합니다. 참조하고 함수를 실행합니다.
  • 제공하려면 람다 함수나 functools.partial을 사용하는 것이 좋습니다. 필요할 때 콜백 함수에 대한 매개변수.
  • 자세한 내용은 Tkinter 콜백에 대한 zone.effbot.org 튜토리얼을 참조하세요.

위 내용은 내 Tkinter 버튼이 클릭할 때 대신 생성할 때 명령을 실행하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿