본문 바로가기
python/tkinter

[Python tkinter GUI] #9 Progessbar(진행바)

by ohojee 2022. 12. 16.
전체 소스코드
import time
import tkinter.ttk as ttk
from tkinter import *

root = Tk()

root.title("GUI")
root.geometry("300x150")

# 프로그래스바 만들기
#progressbar = ttk.Progressbar(root, maximum=100, mode="indeterminate")
progressbar = ttk.Progressbar(root, maximum=100, mode="determinate")

progressbar.start(10) #10s마다 움직임
progressbar.pack()


def btncmd():
    progressbar.stop()

p_var2 = DoubleVar() 
progressbar2 = ttk.Progressbar(root, maximum=100, length=150, variable=p_var2)
progressbar2.pack()


btn = Button(root, text="중지", command=btncmd)
btn.pack()

# 1 ~ 100의 값을 가진 프로그래스바 만들기
def btncmd2():
    for i in range(1, 101):
        time.sleep(0.01) #0.01초 대기

        p_var2.set(i) #progessbar의 값 설정
        progressbar2.update() #ui 업데이트
        print(p_var2.get())
        
btn2 = Button(root, text="시작", command=btncmd2)
btn2.pack()

root.mainloop()
 

Progessbar(진행바)
#progressbar = ttk.Progressbar(root, maximum=100, mode="indeterminate")
progressbar = ttk.Progressbar(root, maximum=100, mode="determinate")

progressbar.start(10) #10s마다 움직임
progressbar.pack()


def btncmd():
    progressbar.stop()
 

왼쪽은 mode="indeterminate" 언제 끝날지 모르는 작업으로

시작점이 없이 초록색바가 왼쪽 오른쪽을 왔다갔다한다

오른쪽은 mode="determinate" 끝이 있는 작업으로

시작점이 있고 끝부분에 바가 닿았다가 다시 줄어든다

 

.start()로 프로그래스 바를 실행할 수 있다

중지 버튼을 누르면 바가 아예 사라진다

p_var2 = DoubleVar() 
progressbar2 = ttk.Progressbar(root, maximum=100, length=150, variable=p_var2)
progressbar2.pack()

def btncmd2():
    for i in range(1, 101):
        time.sleep(0.01) #0.01초 대기

        p_var2.set(i) #progessbar의 값 설정
        progressbar2.update() #ui 업데이트
        print(p_var2.get())
        
btn2 = Button(root, text="시작", command=btncmd2)
btn2.pack()
 

time.sleep(0.01)

p_var2.set(i)

반복문 안에 위의 두 식만 넣는다면 아래 사진처럼

바가 늘어나는 과정은 보이지 않고

0에서 100으로 한 번에 채워진다

 

 

 

동작을 할 때 매번 GUI에 반영을 해줘야하는데 한 번에 반영하기 때문이다

그래서 ui를 업데이트해주는 progressbar2.update() 문장이 필요하다

 

 

그러면 위처럼 진행하는 과정이 잘 보이고

1부터 100까지 터미널에 출력된다

 

 

댓글