본문 바로가기

[Tkinter] 32강 이벤트 객체(event) 구조 이해하기

@도마22026. 2. 5. 21:00
728x90


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

31강에서는
키보드 입력 이벤트를 처리하면서
event.keysym, event.char를 사용해 보았습니다.

이번 강의에서는
지금까지 자연스럽게 써 왔던
이벤트 객체(event)가 무엇인지
구조적으로 정리합니다.

이번 강의의 목표는 분명합니다.
event 객체 안에
어떤 정보들이 들어 있고, 언제 무엇을 쓰는지
명확히 이해하는 것입니다.


event 객체는 언제 만들어질까

event 객체는
사용자가 어떤 행동을 했을 때
Tkinter가 자동으로 생성해서 전달해 줍니다.

마우스를 클릭하거나
키를 누르거나
위젯을 선택하는 순간마다
event 객체 하나가 만들어집니다.


event 객체는 bind에서만 사용된다

중요한 점 하나입니다.

event 객체는
bind 방식에서만 사용됩니다.

widget.bind("<Event>", 함수)

이때
함수는 반드시
event 인자를 받아야 합니다.


event 객체 기본 확인 예제

import tkinter as tk

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

def show_event(event):
    print(event)

window.bind("<Button-1>", show_event)

window.mainloop()

마우스를 클릭하면
event 객체가 출력됩니다.

<ButtonPress event state=Mod1 num=1 x=153 y=94>

event 객체에 들어 있는 정보들

event 객체에는
이벤트와 관련된
다양한 정보가 들어 있습니다.

자주 사용하는 정보는 다음과 같습니다.

  • event.type
  • event.widget
  • event.x, event.y
  • event.keysym, event.char

이제
하나씩 살펴보겠습니다.


event.type 이해하기

event.type은
이벤트의 종류를 나타냅니다.

def show_type(event):
    print(event.type)

예를 들어
마우스 클릭, 키 입력 등
이벤트 종류에 따라
값이 달라집니다.


event.widget 이해하기

event.widget은
이벤트가 발생한 위젯입니다.

def show_widget(event):
	print(event.widget)

여러 위젯에
같은 이벤트 함수를 연결했을 때
어떤 위젯에서 발생했는지
구분할 수 있습니다.


event.x, event.y 좌표 정보

마우스 이벤트에서는
좌표 정보가 매우 중요합니다.

def show_position(event):
	print(event.x, event.y)
  • event.x, event.y : 위젯 기준 좌표
  • event.x_root, event.y_root : 화면 기준 좌표

Canvas나
커스텀 UI에서
자주 사용됩니다.


키보드 이벤트에서의 event 정보

키보드 이벤트에서는
다음 정보가 자주 사용됩니다.

def show_key(event):
	print(event.keysym, event.char)
  • event.keysym : 키 이름
  • event.char : 실제 입력 문자

특수 키는
char 값이 비어 있을 수 있습니다.


하나의 함수로 여러 이벤트 처리하기

event 객체를 사용하면
하나의 함수로
여러 이벤트를 처리할 수 있습니다.

import tkinter as tk

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

def handle_event(event):
    print(event.type, event.widget)

window.bind("<Button-1>", handle_event)
window.bind("<Key>", handle_event)

window.mainloop()

event.type을 기준으로
분기 처리도 가능합니다.


event 객체를 조건문으로 분기하기

def handle_event(event):
    if event.type == "4":
        print("마우스 이벤트")
    else:
        print("기타 이벤트")

이런 방식은
고급 이벤트 처리에서
자주 사용됩니다.


event 객체를 꼭 써야 하는 경우

다음과 같은 상황에서는
event 객체가 필수입니다.

  • 클릭 위치가 필요할 때
  • 어떤 위젯이 눌렸는지 알아야 할 때
  • 키 종류를 구분해야 할 때
  • 하나의 함수로 이벤트를 통합 처리할 때

이런 경우에는
command 방식으로는
처리가 불가능합니다.


event 객체를 너무 남용하지 말자

event 객체는
아주 강력하지만
항상 필요한 것은 아닙니다.

단순 버튼 클릭처럼
이벤트 정보가 필요 없는 경우에는
command를 사용하는 것이
코드를 더 단순하게 만듭니다.


이번 강의 핵심 정리

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

  • event 객체는 bind에서만 사용된다
  • 이벤트 발생 시 Tkinter가 자동으로 전달한다
  • widget, 좌표, 키 정보 등을 포함한다
  • 고급 이벤트 처리의 핵심이다

다음 강의 예고

다음 강의에서는
엔터 키로 버튼 동작시키기를 다룹니다.

지금까지 배운
키보드 이벤트와
command 개념이
하나로 합쳐집니다.


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

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

목차