루프 안에서 어떤 프로세스를 실행하다가 버튼을 클릭했을 때 해당 루프를 중단하고 싶은 경우가 종종 있습니다. 일반적인 프로그래밍 언어에서는 while 루프를 빠져나가기 위해 break 문을 사용하지만, Tkinter에서는 while 루프 대신 after() 메서드를 사용하여 지정한 함수를 일정 시간 간격으로 반복 실행합니다.
after()는 밀리초 단위의 지연 시간과 콜백 함수를 인자로 받아, 설정한 시간이 지난 후 해당 함수를 다시 호출하는 방식으로 루프를 구현합니다. 이렇게 계속 실행되는 루프를 중단하려면 전역 불리언(Boolean) 변수를 하나 만들고, 그 값을 변경함으로써 루프의 실행 상태를 제어하는 것이 가장 깔끔한 방법입니다.
아래 예제는 다음과 같은 순서로 구성됩니다.
루프 내부의 플래그(flag) 역할을 하는 전역 변수를 생성합니다.
실행을 시작하고 중지하는 Start, Stop 두 개의 버튼을 정의합니다.
루프의 상태를 갱신하는 on_start()와 on_stop() 두 개의 함수를 정의합니다.
예제 코드
# 필요한 라이브러리 가져오기
from tkinter import *
from tkinter import ttk
# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
running = True
# 텍스트를 반복적으로 출력하는 함수 정의
def print_text():
if running:
print("Hello World")
win.after(1000, print_text)
# 루프를 시작하는 함수 정의
def on_start():
global running
running = True
# 루프를 중지하는 함수 정의
def on_stop():
global running
running = False
canvas = Canvas(win, bg="skyblue3", width=600, height=60)
canvas.create_text(150, 10, text="Click the Start/Stop to execute the Code", font=('', 13))
canvas.pack()
# 루프를 시작/중지하는 버튼 추가
start = ttk.Button(win, text="Start", command=on_start)
start.pack(padx=10)
stop = ttk.Button(win, text="Stop", command=on_stop)
stop.pack(padx=10)
# 텍스트를 출력하는 함수 실행
win.after(1000, print_text)
win.mainloop()실행 결과
위 코드를 실행하면 특정 조건에 따라 루프가 동작하는 모습을 확인할 수 있습니다.

코드를 실행한 후 Start 버튼을 클릭하면 "Hello World" 텍스트가 1초 간격으로 계속 출력됩니다. 이후 Stop 버튼을 클릭하면 running 변수가 False로 바뀌어 더 이상 텍스트가 출력되지 않습니다. 다시 Start 버튼을 누르면 루프가 재개됩니다.
Hello World Hello World Hello World Hello World Hello World Process finished with exit code 0
핵심 포인트는 Stop 버튼이 루프 자체를 강제로 종료하는 것이 아니라, 전역 변수인 running의 값을 변경하여 루프 내부 조건문(if running:)이 더 이상 동작하지 않도록 만든다는 점입니다. 이 패턴은 Tkinter 애플리케이션에서 타이머, 진행 상태 표시, 주기적 데이터 갱신 등 반복 작업을 유연하게 제어할 때 널리 활용됩니다.