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

Python Tkinter에서 after()로 자동 업데이트되는 GUI 만들기

GUI 창에는 라벨(Label), 버튼(Button), 텍스트 박스 등 다양한 위젯이 포함됩니다. 때때로 사용자가 창을 보고 있는 동안에도 라벨의 내용과 같은 특정 요소가 자동으로 갱신되기를 원하는 경우가 있습니다.

이럴 때 after() 메서드를 활용하면 일정 시간이 지난 후에 함수를 실행할 수 있습니다. 예를 들어 1000밀리초는 1초를 의미합니다. 일정한 시간 간격으로 계속 호출되는 이 함수 안에서 텍스트 변경 등 원하는 갱신 작업을 처리할 수 있습니다.

동작 원리

예제를 단순하게 유지하기 위해, 윈도우에 배치된 라벨이 0부터 1000 사이의 숫자를 보여주고, 이 숫자가 매 1초마다 자동으로 바뀌도록 구현해 보겠습니다.

방법은 간단합니다. 라벨의 텍스트를 0~1000 사이의 임의의 숫자로 변경하는 함수를 정의하고, after()를 사용해 이 함수를 1초 간격으로 반복적으로 호출하면 됩니다.

예제 코드

from Tkinter import *
from random import randint

root = Tk()
lab = Label(root)
lab.pack()

def update():
    lab['text'] = randint(0, 1000)
    root.after(1000, update)  # 1000ms 후 자기 자신을 다시 실행

# 최초 1회 실행
update()

root.mainloop()

위 코드를 실행하면 라벨의 텍스트가 1000밀리초(1초)마다 새로운 숫자로 자동 변경됩니다. 시간 간격은 필요에 따라 얼마든지 조절할 수 있으며, update 함수 내부를 수정하여 원하는 갱신 작업을 수행하도록 확장할 수도 있습니다.

root.after(1000, update)의 의미

이 코드 한 줄이 update() 함수를 반복적으로 재호출하는 핵심 역할을 담당합니다.

  • 첫 번째 매개변수(1000): 함수를 다시 호출하기까지 기다릴 시간 간격을 밀리초 단위로 지정합니다.
  • 두 번째 매개변수(update): 재호출할 함수의 이름을 지정합니다.

이처럼 after() 메서드는 별도의 스레드나 복잡한 타이머 로직 없이도 Tkinter GUI에서 주기적인 자동 갱신을 손쉽게 구현할 수 있는 가장 간단하고 효율적인 방법입니다.