update() 메서드란?
update() 메서드는 애플리케이션에 대기 중인 모든 유휴 작업(idle tasks), 처리되지 않은 이벤트, 함수 호출, 콜백을 전부 처리합니다. 위젯 다시 그리기, 지오메트리 관리, 위젯 속성 설정 등 애플리케이션의 모든 이벤트와 작업을 즉시 갱신하고 처리해야 할 때 활용할 수 있습니다.
또한 update()는 애플리케이션에 미처리 작업이 남아 있을 경우 이를 즉시 갱신하여, 애플리케이션 전체에 영향을 주는 값들이 항상 최신 상태를 유지하도록 보장합니다.
update_idletasks() 메서드란?
단 하나의 대기 작업만 처리하기 위해 update()를 호출하는 것은 비효율적이며, 불필요한 이벤트까지 처리하게 되어 성능 저하나 예기치 않은 동작을 유발할 수 있습니다. 이러한 문제를 해결하기 위해 Tkinter는 update_idletasks() 메서드를 별도로 제공합니다.
update_idletasks()는 어떤 사유로 인해 갱신되지 않고 안정된 상태로 대기 중인 유휴 작업만 처리합니다. 다른 이벤트나 콜백은 처리하지 않고 대기 중인 이벤트만 호출한다는 점이 특징입니다.
두 메서드의 핵심 차이
update()와 update_idletasks() 모두 대기 중이거나 유휴 상태인 작업을 처리하는 데 유용하지만, 두 메서드의 차이점은 다음과 같습니다.
- update(): 애플리케이션에 존재하는 모든 이벤트를 처리합니다.
- update_idletasks(): 실행 중이지 않거나 안정된 상태의 이벤트만 처리합니다.
예제 코드
다음 예제를 통해 update_idletasks() 메서드의 실제 활용 방법을 살펴보겠습니다.
# tkinter 라이브러리 임포트
from tkinter import *
from tkinter import ttk
import time
# tkinter 프레임 인스턴스 생성
win = Tk()
# Tkinter 윈도우 크기 설정
win.geometry("700x350")
def add_Text():
for i in range(10):
label.config(text="루프가 1부터 " + str(i) + "까지 진행됩니다")
# 2초 대기
win.update_idletasks()
time.sleep(2)
label.config(text=i)
# 라벨 텍스트 추가
label = Label(win, text="원본 텍스트", font=('Aerial 16'))
label.pack(pady=30)
# 라벨 텍스트를 갱신하는 버튼 추가
ttk.Button(win, text="텍스트 변경", command=add_Text).pack(pady=40)
win.mainloop()실행 결과
위 코드를 실행하면 라벨 위젯과 버튼이 포함된 창이 화면에 표시됩니다.

버튼을 누르면 라벨 위젯이 지정된 루프 범위 내에서 자동으로 갱신되는 것을 확인할 수 있습니다.
