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

Tkinter 이벤트 루프와 함께 자신만의 코드를 실행하는 방법

Tkinter는 GUI 기반 애플리케이션과 게임을 만들고 개발할 때 널리 사용되는 파이썬 표준 GUI 라이브러리입니다. Tkinter는 프로그램과 함수를 실행할 수 있는 창(window) 또는 프레임(frame)을 제공하며, 다양한 위젯과 속성을 함께 활용할 수 있습니다.

애플리케이션을 개발하다 보면 메인 윈도우가 실행되는 동안 특정 작업을 반복적으로 수행해야 하는 경우가 자주 발생합니다. 예를 들어, 애플리케이션이 구동 중일 때 코드의 변경 사항을 적용하거나 주기적으로 데이터를 갱신하고 싶을 수 있습니다. 이럴 때 Tkinter가 제공하는 콜백(callback) 방식의 after(duration, task) 메서드를 활용하면, 메인 이벤트 루프를 멈추지 않으면서 지정한 시간 간격마다 원하는 작업을 실행할 수 있습니다.

after() 메서드란?

after() 메서드는 첫 번째 인자로 밀리초(ms) 단위의 지연 시간을, 두 번째 인자로 실행할 함수(작업)를 받습니다. 지정한 시간이 경과한 후 해당 함수를 호출하며, 함수 내부에서 재귀적으로 자기 자신을 다시 호출하도록 작성하면 일정한 주기로 작업을 계속 반복 실행할 수 있습니다. 이는 별도의 스레드를 생성하지 않고도 Tkinter의 이벤트 루프와 자연스럽게 통합되어 동작한다는 장점이 있습니다.

예제 코드

다음 예제에서는 메인 윈도우를 실행하면서 콘솔에 0부터 9까지의 숫자를 주기적으로 출력하는 기능을 구현합니다.

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

# Tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()

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

# 버튼 및 반복 작업용 함수 정의
def some_task():
    for i in range(10):
        print(i)

        # 함수를 재귀적으로 호출하여 반복 실행
        win.after(2000, some_task)

# 윈도우 유지 및 작업 시작
win.after(2000, some_task)
win.mainloop()

실행 결과

위 코드를 실행하면 메인 윈도우가 화면에 표시되는 동시에, 콘솔에는 2초마다 0부터 9까지의 숫자가 계속해서 출력됩니다.

0
1
2
3
4
5
6
7
8
9
……

이처럼 after() 메서드를 활용하면 Tkinter 애플리케이션의 이벤트 루프와 병행하여 타이머 기반 작업, 실시간 데이터 갱신, 상태 모니터링 등 다양한 비동기적 처리를 손쉽게 구현할 수 있습니다.