Tkinter에서 변수(var)는 특정 위젯(textvariable=var)에 연결되어 해당 위젯의 변경된 값을 저장하는 역할을 합니다. 때로는 변수 정보가 갱신되는 과정에서 읽기(read), 쓰기(write), 정의되지 않음(undefined)과 같은 추가 작업을 함께 처리해야 하는 경우가 발생합니다.
Tkinter는 trace(self, mode, callback) 콜백 함수를 통해 변수의 변화를 추적할 수 있는 방법을 제공합니다. 이 메서드는 처리 동작의 유형으로 읽기(r), 쓰기(w), 정의되지 않음(u)을 인수로 받습니다. 콜백 함수는 전달받은 모드 값을 기준으로 수행할 작업을 판단합니다. 나머지 두 개의 인수는 각각 추적 대상이 되는 변수 객체(위젯 정보를 포함)와 해당 변수의 인덱스를 나타냅니다.
예제 코드
다음 예제에서는 사용자가 Entry(입력 상자) 위젯에 값을 입력할 때마다 변수 값의 변화를 실시간으로 추적하는 방법을 살펴보겠습니다.
#필요한 라이브러리 임포트
from tkinter import *
#Tkinter 프레임 인스턴스 생성
win = Tk()
win.geometry("750x250")
#사용자 입력을 저장할 변수 생성
my_variable = StringVar()
def trace_when_Entry_widget_is_updated(var, index, mode):
print("{}".format(my_variable.get()))
my_variable.trace_variable("w", trace_when_Entry_widget_is_updated)
Label(win, textvariable=my_variable).pack(padx=5, pady=5)
Entry(win, textvariable=my_variable, width=20).pack(ipadx=20, padx=5, pady=5)
win.mainloop()실행 결과
위 코드를 실행하면 입력값을 변수에 저장하는 Entry 위젯이 화면에 나타납니다. 콜백 함수는 변수의 변경된 값을 지속적으로 추적하며, 그 결과가 Label 위젯에 자동으로 반영됩니다.
이제 Entry 위젯에 원하는 텍스트를 입력해 보세요. Label 위젯이 입력값을 그대로 따라가며 창 화면에 실시간으로 출력합니다.

동시에 콘솔에는 입력 과정이 문자 단위로 기록되어 다음과 같은 결과가 출력됩니다.
H He Hel Hell Hello Hello Hello W Hello Wo Hello Wor Hello Worl Hello World
이처럼 trace_variable() 메서드를 활용하면 변수 값의 변화를 즉시 감지하여 다른 위젯과 연동하거나, 유효성 검사·로그 기록 등 다양한 부가 작업을 손쉽게 구현할 수 있습니다.