개요
파일 다운로드나 파일 추적처럼 외부 소스와 상호작용하는 애플리케이션을 개발할 때는 작업 진행 상황을 사용자에게 시각적으로 보여주는 것이 매우 중요합니다. 이런 기능은 tkinter.ttk 패키지에 포함된 Progressbar 모듈을 활용하면 손쉽게 구현할 수 있습니다.
구현 순서는 간단합니다. 먼저 가로(HORIZONTAL) 방향으로 Progressbar 객체를 생성한 뒤, 진행률 값을 일정량씩 증가시키고 화면에 지속적으로 갱신해 주는 함수를 정의하면 됩니다.
예제 코드
다음 예제에서는 진행률 값을 단계적으로 업데이트하여 다운로드 진행률 표시줄을 만들어 보겠습니다.
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter.ttk import *
import time
# tkinter 프레임 인스턴스 생성
win = Tk()
# 프레임 크기 설정
win.geometry("620x400")
# 진행률을 증가시키는 함수 정의
def start():
task = 10
x = 0
while(x < task):
time.sleep(1)
bar['value'] += 10
x += 1
win.update_idletasks()
bar = Progressbar(win, orient=HORIZONTAL, length=300)
bar.pack(pady=20)
# 다운로드 버튼 생성
Button(win, text="Download", command=start).pack(pady=20)
win.mainloop()코드 설명
- Progressbar(win, orient=HORIZONTAL, length=300): 가로 방향으로 길이 300픽셀짜리 진행률 표시줄을 생성합니다.
- bar['value'] += 10: 반복문이 실행될 때마다 진행률 값을 10씩 증가시킵니다.
- win.update_idletasks(): 메인루프가 멈춘 것처럼 보이지 않도록 GUI를 강제로 다시 그려 줍니다.
실행 결과
코드를 실행하면 창에 다운로드 진행률 표시줄과 "Download" 버튼이 나타납니다. 버튼을 클릭하면 1초마다 진행률이 10%씩 올라가며, 자동으로 100%까지 완료되는 모습을 확인할 수 있습니다.
참고 사항
위 예제에서는 time.sleep()이 메인 스레드를 직접 차단하기 때문에 실제 다운로드 작업과 함께 사용하기에는 적합하지 않습니다. 실무에서는 threading 모듈로 다운로드 작업을 별도 스레드에서 처리하고, 진행률만 UI에 반영하는 방식을 권장합니다. 또한 maximum 속성을 지정하면 전체 작업량에 맞춰 진행률 범위를 자유롭게 조절할 수 있습니다.