На этом шаге мы рассмотрим назначение, свойства и пример использования этого виджета.
Компонент индикатора процесса представляется классом Progressbar. Он поддерживает такие опции:
Для вывода значения в индикаторе следует использовать либо опцию variable, либо опцию value;
Виджет Progressbar поддерживает три метода:
Этот метод используется, если для опции mode задано значение "determinate";
Последний указывается в виде целого числа в миллисекундах. Если метод вызван без параметра, интервал устанавливается равным 50 мс;
Эти два метода применяются, когда для опции mode задано значение "indeterminate".
Далее приведен пример использования индикатора процесса для вывода процента выполнения какого-либо действия. В нем просто имитируется вывод в индикаторе значения, заданного в метапеременной:
import tkinter import tkinter.ttk import time class Application(tkinter.ttk.Frame): def __init__(self, master=None): super().__init__(master) # Обязательно указываем ширину и высоту контейнера посредством # опций width и height соответственно self.configure(width=200, height=100) self.pack(padx=4, pady=4) self.create_widgets() self.master.title("Пример использования Progressbar") # Запрещаем изменять размеры окна self.master.resizable(False, False) def create_widgets(self): self.varValue = tkinter.IntVar() pgb = tkinter.ttk.Progressbar(self, maximum=9, variable=self.varValue) pgb.pack() btnOK = tkinter.ttk.Button(self, text="Запустить Progressbar", command=self.butOk) btnOK.pack() def butOk(self): for i in range(10): time.sleep(0.1) # Задержка self.varValue.set(i) root.update() # Обновление окна root = tkinter.Tk() app = Application(master=root) root.mainloop()
Результат работы приложения приведен на рисунке 1 (показаны не все промежуточные значения).
Рис.1. Результат работы приложения
А вот пример использования индикатора процесса, который показывает пользователю, что какое-либо действие выполняется, но когда его выполнение закончится, установить невозможно:
import tkinter import tkinter.ttk class Application(tkinter.ttk.Frame): def __init__(self, master=None): super().__init__(master) # Обязательно указываем ширину и высоту контейнера посредством # опций width и height соответственно self.configure(width=200, height=100) self.pack(padx=4, pady=4) self.create_widgets() self.master.title("Пример использования Progressbar") # Запрещаем изменять размеры окна self.master.resizable(False, False) def create_widgets(self): self.varValue = tkinter.IntVar() self.pgb = tkinter.ttk.Progressbar(self, mode="indeterminate") self.pgb.pack() btnOK = tkinter.ttk.Button(self, text="Запустить Progressbar", command=self.butOk) btnOK.pack() btnCancel = tkinter.ttk.Button(self, text="Остановить Progressbar", command=self.butCancel) btnCancel.pack() def butOk(self): self.pgb.start(10) def butCancel(self): self.pgb.stop() root = tkinter.Tk() app = Application(master=root) root.mainloop()
Результат работы приложения приведен на рисунке 2 (показаны не все промежуточные значения).
Рис.2. Результат работы приложения
На следующем шаге мы рассмотрим виджет Sizegrip.