Глава 16 · Создаём классные приложения с Tkinter
Progressbar и вкладки Notebook
Прогресс должен быть честным, а вкладки — естественным способом уместить много настроек.
Progressbar — прогресс, а не украшение
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.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
Практика выполняется локально