Шаг 45.
Библиотека Tkinter. Компоненты и вспомогательные классы. Стилизуемые компоненты. Компонент Progressbar: индикатор процесса

    На этом шаге мы рассмотрим назначение, свойства и пример использования этого виджета.

    Компонент индикатора процесса представляется классом Progressbar. Он поддерживает такие опции:

    Виджет Progressbar поддерживает три метода:

    Далее приведен пример использования индикатора процесса для вывода процента выполнения какого-либо действия. В нем просто имитируется вывод в индикаторе значения, заданного в метапеременной:

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.




Предыдущий шаг Содержание Следующий шаг