Tkinter에서 콜백 함수(callback)는 위젯에서 발생하는 특정 이벤트를 처리하기 위해 일반적으로 사용됩니다. Entry(입력) 위젯의 내용이 수정될 때마다 이벤트 콜백 함수를 실행하도록 설정할 수 있습니다.
이벤트 콜백 함수를 만들려면 먼저 사용자 입력을 저장할 변수를 지정해야 합니다. 해당 변수에 trace("mode", lambda name, index, mode: callback()) 메서드를 적용하면, 창 안의 Label 위젯에서 입력 내용을 실시간으로 추적할 수 있습니다.
핵심 개념: trace() 메서드
trace() 메서드는 변수의 상태 변화를 감지하는 기능을 제공합니다. 모드 인자로 사용되는 값은 다음과 같습니다.
- "w" (write): 변수에 값이 쓰일 때(수정될 때) 콜백 호출
- "r" (read): 변수의 값을 읽을 때 콜백 호출
- "u" (undefined): 변수가 삭제될 때 콜백 호출
Entry 위젯의 입력 변경을 감지하려면 일반적으로 "w" 모드를 사용합니다.
예제 코드
# Tkinter 라이브러리 임포트
from tkinter import *
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 창 크기 설정
win.geometry("750x250")
def callback(var):
content = var.get()
Label(win, text=content).pack()
# 사용자 입력을 저장할 변수 생성
var = StringVar()
var.trace("w", lambda name, index, mode, var=var: callback(var))
# Entry 위젯 생성
e = Entry(win, textvariable=var)
e.pack()
win.mainloop()코드 설명
- StringVar() 변수 생성: 사용자의 입력값을 저장하는 문자열 변수입니다.
- textvariable 옵션 연결: Entry 위젯에 textvariable=var를 지정하여 위젯과 변수를 연동합니다.
- trace("w", ...) 등록: 변수의 값이 변경될 때마다 lambda 함수가 호출되고, 이어서 callback(var)가 실행됩니다.
- callback 함수: var.get()으로 현재 입력값을 가져온 후, 새로운 Label 위젯에 출력합니다.
실행 결과
위 코드를 실행하면 Entry 위젯에 입력된 문자가 화면의 텍스트 레이블(Label)에 표시됩니다. Entry 위젯에 직접 무언가를 입력해 보면, 입력 이벤트가 발생할 때마다 Label 위젯에 내용이 실시간으로 반영되는 것을 확인할 수 있습니다.

참고 사항
매번 새로운 Label을 생성하는 대신, 하나의 Label을 만들어 두고 label.config(text=content) 방식으로 텍스트만 갱신하면 더 깔끔하게 구현할 수 있습니다. 또한 Python 3.6 이상에서는 trace_add("write", callback) 메서드를 사용하는 것이 권장됩니다.