Виджет Tkinter Progressbar в Python — параметры и примеры
- Что такое виджет Tkinter Progressbar?
- Режим indeterminate
- Режим determinate
- Важные методы Progressbar
- Примеры Tkinter Progressbar
- 1) Пример Tkinter Progressbar в неопределенном режиме
- 2) Пример Tkinter Progressbar в определенном режиме
Что такое виджет Tkinter Progressbar?
Виджет Progressbar позволяет давать пользователю в Python обратную связь о ходе выполнения длительной задачи. Для создания виджета используйте класс ttk.Progressbar:
ttk.Progressbar(container, **options)
Ниже показаны типичные параметры для создания виджета Progressbar:
ttk.Progressbar(container, orient, length, mode)
В этом синтаксисе:
- container является родительским компонентом индикатора выполнения.
- orient может быть как «горизонтальной», так и «вертикальной».
- length представляет собой ширину горизонтальной полосы прогресса или высоту вертикальной полосы прогресса.
- mode может быть «determinate» или «indeterminate».
Режим indeterminate
В неопределенном режиме полоса выполнения отображает индикатор, который прыгает вперед и назад между концами виджета.
Обычно режим indeterminate используется, когда вы не знаете, как точно измерить время, необходимое для выполнения длительной задачи.
Режим determinate
В определенном режиме полоса прогресса отображает индикатор от начала до конца виджета.
Если вы знаете, как измерить относительный прогресс, вы можете использовать режим determinate.
Важные методы Progressbar
Progressbar имеет следующие важные методы:
- start([interval]) – начать перемещение индикатора каждый интервал миллисекунд. Интервал по умолчанию 50 мс.
- step([delta]) – увеличить значение индикатора на delta. Дельта по умолчанию составляет 1 миллисекунду.
- stop() – остановить перемещение индикатора Progressbar.
Примеры Tkinter Progressbar
Давайте рассмотрим несколько примеров создания виджетов Progressbar.
1) Пример Tkinter Progressbar в неопределенном режиме
Следующая программа иллюстрирует, как создать Progressbar в режиме indeterminate. Если нажать кнопку «Пуск», Progressbar начнет перемещать индикатор. Когда вы нажмете кнопку «Стоп», Progressbar прекратит перемещать индикатор прогресса:
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 )
- Во-вторых, передайте метод Progressbar.start команде кнопки «Пуск»:
start_button = ttk.Button( root, text='Start', command=pb.start )
- В-третьих, передайте метод Progressbar.stop команде кнопки остановки:
stop_button = ttk.Button( root, text='Stop', command=pb.stop )
2) Пример Tkinter Progressbar в определенном режиме
Следующая программа показывает, как использовать индикатор выполнения в режиме determinate:
from tkinter import ttk import tkinter as tk from tkinter.messagebox import showinfo # root window root = tk.Tk() root.geometry('300x120') root.title('Progressbar Demo') def update_progress_label(): return f"Current Progress: {pb['value']}%" def progress(): if pb['value'] < 100: pb['value'] += 20 value_label['text'] = update_progress_label() else: showinfo(message='The progress completed!') def stop(): pb.stop() value_label['text'] = update_progress_label() # progressbar pb = ttk.Progressbar( root, orient='horizontal', mode='determinate', length=280 ) # place the progressbar pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20) # label value_label = ttk.Label(root, text=update_progress_label()) value_label.grid(column=0, row=1, columnspan=2) # start button start_button = ttk.Button( root, text='Progress', command=progress ) start_button.grid(column=0, row=2, padx=10, pady=10, sticky=tk.E) stop_button = ttk.Button( root, text='Stop', command=stop ) stop_button.grid(column=1, row=2, padx=10, pady=10, sticky=tk.W) root.mainloop()
Выход:
Как это работает.
- Сначала создадим индикатор выполнения в режиме determinate:
pb = ttk.Progressbar( root, orient='horizontal', mode='determinate', length=280 )
- Во-вторых, привяжите функцию progress() к событию click кнопки progress. После нажатия кнопки значение Progressbar увеличивается на 20%, а метка progress обновляется. Кроме того, программа показывает окно сообщения, указывающее, что прогресс завершен, если значение достигает 100:
def progress(): if pb['value'] < 100: pb['value'] += 20 value_label['text'] = update_progress_label() else: showinfo(message='The progress completed!')
- В-третьих, привяжите функцию stop() к событию нажатия кнопки «стоп». Также функция stop() обновит метку прогресса.
def stop(): pb.stop() value_label['text'] = update_progress_label()