Глава 16 · Создаём классные приложения с Tkinter

Progressbar и вкладки Notebook

Прогресс должен быть честным, а вкладки — естественным способом уместить много настроек.

Progressbar — прогресс, а не украшение

Четыре Progressbar на 0%, 35%, 70% и 100%
Реальные состояния одного и того же виджета при разных значениях value. Пример внешнего вида на среде курса. На вашей ОС шрифты, размеры и тема могут немного отличаться.
progressbar.py
progress = ttk.Progressbar(root, mode="determinate", maximum=100, value=0)
progress.pack(fill="x")

def obnovit_progress(procent):
    progress["value"] = procent
РежимКогда использовать
determinateизвестно точное количество этапов/процент выполнения
indeterminateработа идёт, но её объём заранее не известен
Не подделывайте прогресс, которого не знаете
Если приложение реально не может оценить процент выполнения — используйте mode="indeterminate" (бегущая полоса), а не произвольные числа в determinate. Ложный прогресс хуже честного «неизвестно, сколько осталось».
progressbar_indeterminate.py
progress = ttk.Progressbar(root, mode="indeterminate")
progress.pack(fill="x")

progress.start()    # запускает анимацию бегущей полосы
# ... долгая операция ...
progress.stop()     # останавливает анимацию
indeterminate не анимируется сам по себе
Создание Progressbar(mode="indeterminate") не запускает анимацию автоматически — движение бегущей полосы начинается только после явного вызова .start() и останавливается по .stop().

Notebook — вкладки

Notebook с тремя вкладками: Общие, Внешний вид, Файлы — активна первая
Три вкладки, активна «Общие» с флажком «Автосохранение» внутри. Пример внешнего вида на среде курса. На вашей ОС шрифты, размеры и тема могут немного отличаться.
notebook.py
vkladki = ttk.Notebook(root)
vkladki.pack(fill="both", expand=True)

obshaya_vkladka = ttk.Frame(vkladki)
vneshnij_vid_vkladka = ttk.Frame(vkladki)
fajly_vkladka = ttk.Frame(vkladki)

vkladki.add(obshaya_vkladka, text="Общие")
vkladki.add(vneshnij_vid_vkladka, text="Внешний вид")
vkladki.add(fajly_vkladka, text="Файлы")

Каждая вкладка — обычный Frame, внутри которого можно независимо использовать pack() или grid() — прекрасно подходит для окна настроек (раздел 16.25). На скриншоте выше видно ровно то, что описывает термин «вкладка» — переключаемая область содержимого внутри одного окна, а не несколько отдельных окон.

Практика: Progressbar и Notebook
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →