본문 바로가기
Python/Tkinter

[Tkinter] 17. 커맨드 바인딩 Command Binding

by 파인스코어 2024. 2. 21.
728x90

Tkinter의 커맨드 바인딩

애플리케이션을 좀 더 동적으로 만들기 위해서 위젯들은 마우스 클릭, 키보드 키 입력과 같은 이벤트에 반응해야 한다.

이를 위해서는 특정 이벤트에 콜백 함수를 할당하는 것이 필요하다. 이벤트가 발생하면 콜백이 자동으로 호출되어 이벤트를 호출하게 된다.

Tkinter는 일부 위젯에서 커맨드 바인딩을 사용하여 이벤트에 대한 콜백 함수를 연결할 수 있다.

위젯의 command 옵션에 함수를 넣어서 위젯에서 이벤트가 발생했을 때 해당 함수가 자동적으로 호출되도록 한다. 

커맨드 바인딩은 아래의 과정으로 진행된다.

1. 콜백 함수를 정의한다
2. 위젯의 command 옵션에 함수를 할당한다.

예를 들어 Button 위젯은 아래의 코드와 같이 작성하게 된다.

ttk.Button(root, text='Click Me', command=button_clicked)

 

여기서 주의할 점이 있는데 command 옵션을 잘 보면 ()가 없는 것을 볼 수 있다. ()를 붙이면 호출이 되지 않는다.

그러면 매개변수가 필요한 함수의 호출은 어떻게 해야되는 것일까?

콜백 함수와 람다

command 옵션의 값은 콜백 함수다.

콜백 함수에 대해 간단히 설명하자면 외부 함수 내부에서 호출되는 함수다.

Button 함수 내부에서 호출되기 때문에 콜백 함수라고 할 수 있다.

command 옵션의 있는 button_clicked는 함수의 참조다. button_clicked()는 함수의 호출이다.

()를 붙이면 함수가 미리 호출이 되기 때문에 내가 원하는 대로 동작하지 않는다.

이를 막기 위해서는 람다를 사용해야 한다.

ttk.Button(root, text='Click Me', command=lambda: button_clicked())

람다를 사용하면 command 옵션 안에서 익명 함수로 정의되기 때문에 바로 호출되지 않고 내가 원하는 대로 동작하게 된다.

이 때문에 함수 이름만 쓰는 참조 형식보다는 매개변수를 다양하게 넣을 수 있는 람다 표현을 사용하는 것이 좋다.  

참고

https://www.pythontutorial.net/tkinter/tkinter-command/

https://coderslegacy.com/python/tkinter-lambda/

728x90