Tkinter는 Python에서 GUI(그래픽 사용자 인터페이스)를 만들기 위한 대표적인 표준 라이브러리입니다. GUI 창과 다양한 위젯(widget)을 생성하고 조작할 수 있는 내장 메소드를 다수 제공하며, 데이터 표시나 GUI 이벤트 처리에도 활용됩니다. 이 글에서는 그중 after() 메소드를 활용해 특정 작업을 지연 실행하거나 반복 호출하는 방법을 실제 예제와 함께 살펴보겠습니다.
after() 메소드 문법
.after(delay, FuncName=FuncName)
after() 메소드는 지정한 지연 시간(delay, 밀리초 단위)이 경과한 후에 FuncName에 전달된 함수를 호출합니다. 밀리초 단위로 동작하기 때문에 1000을 입력하면 1초 뒤에 함수가 실행됩니다. 이 특성을 활용하면 타이머, 애니메이션, 자동 종료 등 다양한 기능을 손쉽게 구현할 수 있습니다.
예제 1: 위젯을 무작위로 순차 표시하기
첫 번째 예제에서는 단어 목록을 무작위 순서로 하나씩 화면에 표시하는 프레임을 만들어 보겠습니다. random 라이브러리와 after() 메소드를 함께 사용하여, 주어진 텍스트 목록을 일정 간격으로 무작위 출력하는 함수를 반복 호출합니다.
import random from tkinter import * base = Tk() a = Label(base, text="After() Demo") a.pack() contrive = Frame(base, width=450, height=500) contrive.pack() words = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri','Sat','Sun'] # 요일을 무작위 순서로 하나씩 표시합니다. def display_weekday(): if not words: return rand = random.choice(words) character_frame = Label(contrive, text=rand) character_frame.pack() contrive.after(500, display_weekday) words.remove(rand) base.after(0, display_weekday) base.mainloop()
위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

동일한 프로그램을 다시 실행하면 매번 서로 다른 순서로 요일이 표시되는 것을 볼 수 있습니다. 이는 random.choice()가 목록에서 무작위로 요소를 선택하기 때문입니다.

코드 동작 원리
base.after(0, display_weekday): 프로그램 시작 즉시(지연 0ms) 함수를 최초 호출합니다.contrive.after(500, display_weekday): 함수 내부에서 자기 자신을 500밀리초(0.5초) 간격으로 재귀적으로 호출하여 반복 실행 효과를 만듭니다.words.remove(rand): 이미 표시된 단어를 목록에서 제거하여 중복 출력을 방지합니다.
예제 2: after()로 프로세스 자동 종료하기
두 번째 예제에서는 after() 메소드를 지연 메커니즘으로 활용하는 방법을 살펴봅니다. 특정 프로세스가 일정 시간 동안 실행된 뒤 자동으로 멈추도록 설정하고, 여기에 destroy() 메소드를 함께 사용해 창과 프로그램을 종료합니다.
from tkinter import Tk, mainloop, TOP
from tkinter.ttk import Button
from time import time
base = Tk()
stud = Button(base, text = 'After Demo()')
stud.pack(side = TOP, pady = 8)
print('processing Begins...')
begin = time()
base.after(3000, base.destroy)
mainloop()
conclusion = time()
print('process destroyed in % d seconds' % ( conclusion-begin))위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
processing Begins... process destroyed in 3 seconds
코드 동작 원리
base.after(3000, base.destroy): 3000밀리초(3초) 후에destroy()메소드를 호출하여 Tkinter 창을 종료합니다.time()모듈로 시작 시점과 종료 시점을 측정하여, 실제로 약 3초 후에 프로세스가 종료되었음을 콘솔에 출력합니다.
마무리
Tkinter의 after() 메소드는 별도의 스레드나 복잡한 타이머 라이브러리 없이도 지연 실행, 반복 호출, 자동 종료 같은 기능을 간단하게 구현할 수 있는 강력한 도구입니다. GUI 애니메이션, 자동 저장, 일정 시간 후 알림 표시 등 다양한 상황에서 유용하게 활용해 보시기 바랍니다.