Tkinter Progressbar

2024. 3. 8. 18:32GUI/tkinter

요약 : 이 튜토리얼에서는 Tkinter Progressbar 위젯에 대해 배우게 됩니다.

Tkinter Progressbar 위젯 소개

Progressbar 위젯을 사용하면 장기 실행 작업의 진행 상황에 대한 피드백을 사용자에게 제공할 수 있습니다. Progressbar 위젯을 생성하려면 다음 ttk.Progressbar클래스를 사용합니다.

ttk.Progressbar(container, **options)

다음은 Progressbar 위젯을 생성하기 위한 일반적인 매개변수를 보여줍니다.

ttk.Progressbar(container, orient, length, mode)

이 구문에서는:

  • container는 진행률 표시줄의 상위 구성 요소입니다.
  • orient는 'horizontal' 또는 'vertical' 일 수 있습니다.
  • length는 가로 진행률 표시줄의 너비 또는 세로 진행률 표시줄의 높이를 나타냅니다.
  • mode는 'determinate' 또는 'indeterminate' 일 수 있습니다.

불확정 모드

indeterminate 모드에서는 진행률 표시줄에 위젯 끝 사이를 앞뒤로 움직이는 표시기가 표시됩니다.

일반적으로, 장기 실행 작업을 완료하는 데 걸리는 시간을 정확하게 측정하는 방법을 모를 때 indeterminate 모드를 사용합니다.

확정 모드

determinate 모드에서는 진행률 표시줄에 위젯의 처음부터 끝까지 표시기가 표시됩니다.

상대적인 진행 상황을 측정하는 방법을 알고 있다면 determinate 모드를 사용할 수 있습니다.

진행률 표시줄의 중요한 메서드

Progressbar에는 다음과 같은 중요한 메서드가 있습니다.

  • start([interval])– interval 밀리초마다 표시기를 움직이기 시작합니다. interval 기본값은 50ms입니다.
  • step([delta])– 지표 값을 델타만큼 늘립니다. delta 기본값은 1 밀리초입니다.
  • stop()– 진행 표시줄의 표시 이동을 중지합니다.

Tkinter Progressbar 예제

진행률 표시줄 위젯을 만드는 몇 가지 예를 살펴보겠습니다.

indeterminate1) 모드 예제 의 Tkinter Progressbar

다음 프로그램은 indeterminate 모드에서 진행률 표시줄을 만드는 방법을 보여줍니다. start 버튼 을 클릭하면 진행률 표시줄이 표시기를 움직이기 시작합니다. stop 버튼을 클릭하면 진행률 표시줄의 진행률 표시기 이동이 중지됩니다.

In [2]:
import tkinter as tk
from tkinter import ttk

# root window
root = tk.Tk()
root.geometry('300x120')
root.title('Progressbar Demo')

root.grid()

# progressbar
pb = ttk.Progressbar(
    root,
    orient='horizontal',
    mode='indeterminate',
    length=280
)
# place the progressbar
pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20)


# start button
start_button = ttk.Button(
    root,
    text='Start',
    command=pb.start
)
start_button.grid(column=0, row=1, padx=10, pady=10, sticky=tk.E)

# stop button
stop_button = ttk.Button(
    root,
    text='Stop',
    command=pb.stop
)
stop_button.grid(column=1, row=1, padx=10, pady=10, sticky=tk.W)


root.mainloop()

 

 

동작 방식.

먼저 길이가 280픽셀이고 'indeterminate' 모드가 다음과 같은 수평 진행률 표시줄을 만듭니다.

pb = ttk.Progressbar(
     root,
     orient='horizontal',
     mode='indeterminate',
     length=280
)

둘째, start 버튼 명령에 Progressbar.start 메서드를 전달합니다.

start_button = ttk.Button(
     root,
     text='Start',
     command=pb.start
)

셋째, stop 버튼 명령에 Progressbar.stop 메서드를 전달합니다.

stop_button = ttk.Button(
     root,
     text='Stop',
     command=pb.stop
)

2) determinate 모드 예제 의 Tkinter Progressbar

다음 프로그램은 determinate 모드에서 진행률 표시줄을 사용하는 방법을 보여줍니다.

In [4]:

 

동작 방식.

먼저 determinate 모드에서 진행률 표시줄을 만듭니다.

pb = ttk.Progressbar(
     root,
     orient='horizontal',
     mode='determinate',
     length=280
)

둘째, progress 버튼의 클릭 이벤트에 progress() 함수를 바인딩합니다. 버튼을 클릭하면 진행률 표시줄의 값이 20% 증가하고 진행률 레이블이 업데이트됩니다. 또한 프로그램은 값이 100에 도달하면 진행이 완료되었음을 나타내는 메시지 상자를 표시합니다.

def progress():
     if pb['value'] < 100:
         pb['value'] += 20
         value_label['text'] = update_progress_label()
     else:
         showinfo(message='The progress completed!')

셋째, stop() 버튼의 클릭 이벤트에 stop 함수를 바인딩합니다. 또한 stop() 함수는 진행률 레이블을 업데이트합니다.

def stop():
     pb.stop()
     value_label['text'] = update_progress_label()

요약

  • 진행률 표시줄을 만들려면 ttk.Progressbar(container, orient, length, mode)를 사용하세요 .
  • 프로그램이 표시할 상대적인 진행 상황을 정확하게 알 수 없는 경우 indeterminate 모드를 사용하십시오 .
  • 진행 상황을 정확하게 측정하는 방법을 알고 있다면 determinate 모드를 사용하세요 .
  • start(), step() 및 stop() 메서드를 사용하여 진행률 표시줄의 현재 값을 제어합니다.
 

'GUI > tkinter' 카테고리의 다른 글

Tkinter Treeview  (0) 2024.03.10
Tkinter Notebook  (0) 2024.03.09
Tkinter LabelFrame  (0) 2024.03.07
Tkinter Sizegrip  (0) 2024.03.06
Tkinter Spinbox  (0) 2024.03.05