본문 바로가기

[Tkinter] 29강 command와 bind 이벤트 차이 이해하기

@도마22026. 2. 4. 18:00
728x90


이 강의는 Tkinter GUI 강의 29강입니다

28강에서는
Combobox 선택 값을
실제 로직과 다른 위젯에 연결하는 방법을 배웠습니다.

이번 강의에서는
지금까지 계속 사용해 온
두 가지 이벤트 처리 방식

  • command
  • bind

의 차이를
명확하게 정리합니다.

이번 강의의 목표는 분명합니다.
언제 command를 쓰고
언제 bind를 써야 하는지
선택 기준을 확실히 만드는 것입니다.


Tkinter 이벤트 처리에는 두 가지 방식이 있다

Tkinter에서
사용자 동작을 처리하는 방법은
크게 두 가지입니다.

  • 위젯 옵션으로 연결하는 방식 → command
  • 이벤트를 직접 바인딩하는 방식 → bind

둘은
비슷해 보이지만
역할과 성격이 다릅니다.


command 방식의 기본 개념

command는
위젯에 미리 정해진 동작을 연결하는 방식입니다.

대표적으로
Button에서 가장 많이 사용합니다.


command 기본 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

def on_click():
    print("버튼 클릭")

tk.Button(window, text="클릭", command=on_click).pack(pady=20)

window.mainloop()

버튼을 클릭하면
연결된 함수가
즉시 실행됩니다.


command 방식의 특징

command 방식의 특징은 다음과 같습니다.

  • 사용법이 단순하다
  • 함수에 인자를 직접 받지 않는다
  • 클릭 같은 기본 동작에 적합하다

그래서
초보자에게 가장 친숙한 방식입니다.


bind 방식의 기본 개념

bind는
이벤트 자체를 직접 처리하는 방식입니다.

마우스 클릭
키보드 입력
위젯 선택 변화

모든 이벤트를
세밀하게 다룰 수 있습니다.


bind 기본 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

def on_click(event):
    print("마우스 클릭")

label = tk.Label(window, text="여기를 클릭")
label.pack(pady=20)

label.bind("<Button-1>", on_click)

window.mainloop()

bind로 연결된 함수는
event 객체를 인자로 받습니다.


event 객체란 무엇인가

bind 방식에서
함수로 전달되는 event에는
이벤트 정보가 들어 있습니다.

def on_click(event):
    print(event.x, event.y)
  • event.x, event.y : 클릭 위치
  • event.widget : 이벤트가 발생한 위젯
  • event.type : 이벤트 종류

이 정보 덕분에
정교한 처리가 가능합니다.


command와 bind의 가장 큰 차이

두 방식의 핵심 차이는
이벤트 정보의 유무입니다.

command

  • 이벤트 정보 없음
  • 단순한 동작 처리

bind

  • 이벤트 정보 있음
  • 세밀한 제어 가능

이 차이를
가장 먼저 기억하면 됩니다.


같은 동작을 두 방식으로 비교해보기

command 방식

tk.Button(window, text="버튼", command=on_click)

bind 방식

button = tk.Button(window, text="버튼")
button.pack()
button.bind("<Button-1>", on_click)

bind는
조금 더 복잡하지만
자유도가 훨씬 높습니다.


어떤 위젯은 command만 지원한다

모든 위젯이
bind와 command를
동시에 쓰는 것은 아닙니다.

예를 들어
Button은 command를 지원하지만
Entry는 command가 없습니다.

tk.Entry(window)

Entry 입력을 처리하려면
bind를 사용해야 합니다.


bind는 하나의 위젯에 여러 이벤트를 연결할 수 있다

bind의 장점 중 하나는
이벤트를 여러 개 연결할 수 있다는 점입니다.

entry.bind("<Return>", on_enter)
entry.bind("<FocusIn>", on_focus)

command로는
이런 처리가 불가능합니다.


언제 command를 쓰는 게 좋을까

다음과 같은 경우에는
command가 적합합니다.

  • 버튼 클릭 처리
  • 메뉴 선택 처리
  • 단순한 실행 동작

즉,
“이걸 누르면 이 함수 실행”
구조일 때입니다.


언제 bind를 써야 할까

다음과 같은 경우에는
bind가 적합합니다.

  • 키보드 입력 처리
  • 마우스 이벤트 처리
  • 이벤트 정보가 필요한 경우
  • 선택 변화 감지

지금부터 배우게 될
이벤트 강의 대부분은
bind 기반입니다.


command와 bind는 함께 써도 된다

상황에 따라
두 방식을
같이 사용하는 것도 가능합니다.

중요한 것은
역할에 맞게 선택하는 것입니다.


이번 강의 핵심 정리

이번 강의에서 꼭 기억해야 할 내용입니다.

  • command는 단순한 동작 처리용이다
  • bind는 이벤트 자체를 다룬다
  • bind는 event 객체를 사용할 수 있다
  • 상황에 따라 두 방식을 선택한다

다음 강의 예고

다음 강의에서는
마우스 클릭 이벤트 처리
본격적으로 다룹니다.

bind 이벤트가
실제로 어떻게 쓰이는지
확실히 체감하게 될 것입니다.


728x90
도마2
@도마2 :: 도마의 코드노트

초보자를 위한 코딩 강의를 정리합니다. 파이썬부터 C#, Unity 게임 제작까지 차근차근 기록합니다. — 도마

목차