Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter GUI로 무한 루프를 제어하는 시작·중지 버튼 만드는 방법

Tkinter는 파이썬에서 GUI 기반 애플리케이션을 만들 때 사용하는 대표적인 표준 라이브러리입니다. 실제 개발 과정에서는 특정 함수가 루프 안에서 계속 실행되는 애플리케이션을 만들어야 하는 경우가 종종 있습니다. 예를 들어, 재귀 함수가 Label 위젯에 텍스트를 무한히 출력하는 상황을 가정해 볼 수 있습니다.

이렇게 무한히 반복되는 재귀 함수를 중단하려면, 버튼이 클릭될 때마다 조건을 변경하는 별도의 함수를 정의하면 됩니다. 조건은 True 또는 False 값을 가지는 전역 변수(global variable)를 선언하여 손쉽게 제어할 수 있습니다.

동작 원리

핵심은 win.after() 메서드입니다. 이 메서드는 지정한 시간(밀리초 단위)이 지난 후에 함수를 다시 호출하도록 예약합니다. 아래 예제에서는 1,000밀리초(1초)마다 print_hello() 함수를 재호출하여 무한 루프를 형성하고, 전역 변수 run의 값에 따라 Label에 텍스트를 출력할지 여부를 결정합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *

# tkinter 프레임 인스턴스 생성
win = Tk()

# Tkinter 윈도우 크기 설정
win.geometry("700x350")

# 무한 루프 안에서 텍스트를 출력하는 함수 정의
run = True

def print_hello():
    if run:
        Label(win, text="Hello World", font=('Helvetica 10 bold')).pack()
    # 1초 후 print_hello() 함수를 다시 호출
    win.after(1000, print_hello)

def start():
    global run
    run = True

def stop():
    global run
    run = False

# 루프의 시작과 종료를 트리거하는 버튼 생성
start = Button(win, text="Start", command=start)
start.pack(padx=10)
stop = Button(win, text="Stop", command=stop)
stop.pack(padx=15)

# 1초 후 print_hello() 함수 최초 호출
win.after(1000, print_hello)
win.mainloop()

실행 결과

Tkinter GUI로 무한 루프를 제어하는 시작·중지 버튼 만드는 방법

프로그램을 실행하면 1초 간격으로 "Hello World" 텍스트가 Label 위젯에 계속 추가됩니다. 이때 "Stop" 버튼을 클릭하면 전역 변수 runFalse로 변경되어 print_hello() 함수의 재귀 호출이 중단되고, 더 이상 새로운 텍스트가 출력되지 않습니다.

반대로 "Start" 버튼을 다시 누르면 runTrue로 바뀌어 루프가 재개됩니다. 이처럼 전역 변수 하나만으로 반복 작업의 흐름을 유연하게 제어할 수 있으며, 이 패턴은 타이머, 실시간 데이터 갱신 등 다양한 Tkinter 애플리케이션에서 활용할 수 있습니다.