diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /PYTHON/PROGRESS BAR.md | |
First
Diffstat (limited to 'PYTHON/PROGRESS BAR.md')
| -rw-r--r-- | PYTHON/PROGRESS BAR.md | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/PYTHON/PROGRESS BAR.md b/PYTHON/PROGRESS BAR.md new file mode 100644 index 0000000..d9d054d --- /dev/null +++ b/PYTHON/PROGRESS BAR.md @@ -0,0 +1,138 @@ +# + + +Зачем нужны индикаторы прогресса? + +Индикаторы прогресса (progress bar) — визуальное отображение процесса работы. Они избавляют нас от необходимости беспокоиться о том, не завис ли скрипт, дают интуитивное представление о скорости его выполнения и подсказывают, сколько времени осталось до завершения. + +Человек ранее не использовавший индикаторы прогресса может предположить, что их внедрение может сильно усложнить код. К счастью, это не так. Небольшие примеры ниже покажут, как быстро и просто начать отслеживать прогресс в консоли или в интерфейсе быстро набирающей популярность графической библиотеки [PySimpleGUI](https://github.com/PySimpleGUI/PySimpleGUI). + +# Используем Progress + +Первым у нас идёт модуль [Progress](https://github.com/verigak/progress/)_._ + +Всё, что от вас потребуется, это указать количество ожидаемых итераций, тип индикатора и вызывать функцию при каждой итерации: + +```python +import time +from progress.bar import IncrementalBar + +mylist = [1,2,3,4,5,6,7,8] + +bar = IncrementalBar('Countdown', max = len(mylist)) + +for item in mylist: + bar.next() + time.sleep(1) + +bar.finish() +``` +Результат работы: + + +Есть индикаторы на любой вкус: + + +# Используем tqdm + +> Быстрый и расширяемый индикатор прогресса для Python и CLI + +Всего один вызов функции понадобится для получения результата аналогичного предыдущему: + +```python +import time +from tqdm import tqdm + +mylist = [1,2,3,4,5,6,7,8] + +for i in tqdm(mylist): + time.sleep(1) +``` +Получаем: + + +Само собой, в комплекте идёт куча настроек и опций. + +# Используем alive-progress + +Ещё один [вариант](https://github.com/rsalmei/alive-progress) синтаксиса, побольше дефолтных анимаций, чем в предыдущих примерах: + +```python +from alive_progress import alive_bar +import time + +mylist = [1,2,3,4,5,6,7,8] + +with alive_bar(len(mylist)) as bar: + for i in mylist: + bar() + time.sleep(1) +``` +Результат: + + + +# GUI индикатор прогресса для скрипта + +Иногда возникает необходимость предоставить конечному пользователю графический индикатор. + + + +Сколько кода нужно, чтобы достигнуть такого результата? Немного: +```python +import PySimpleGUI as sg +import time + +mylist = [1,2,3,4,5,6,7,8] + +for i, item in enumerate(mylist): + sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-') + time.sleep(1) +``` + +# Индикатор в приложении PySimpleGUI + +Рассмотрим реализацию индикатора в [PySimpleGUI](https://github.com/PySimpleGUI/PySimpleGUI). + + + +Вот как это сделать: + +```python +import PySimpleGUI as sg +import timemylist = [1,2,3,4,5,6,7,8] + +progressbar = [ + [sg.ProgressBar(len(mylist), orientation='h', size=(51, 10), key='progressbar')]] +outputwin = [ + [sg.Output(size=(78,20))] +] + +layout = [ + [sg.Frame('Progress',layout= progressbar)], + [sg.Frame('Output', layout = outputwin)], + [sg.Submit('Start'),sg.Cancel()] +] + +window = sg.Window('Custom Progress Meter', layout) +progress_bar = window['progressbar'] + +while True: + event, values = window.read(timeout=10) + if event == 'Cancel' or event is None: + break + elif event == 'Start': + for i,item in enumerate(mylist): + print(item) + time.sleep(1) + progress_bar.UpdateBar(i + 1) + +window.close() +``` +# Заключение + +Как видите, нет ничего сложного в добавлении информации о прогрессе выполнения: кода немного, а отзывчивость повышается очень сильно. Используйте индикаторы, чтобы больше никогда не гадать, завис ли процесс или нет! + +========================================== + +![[telegram-cloud-photo-size-2-5337133182321027005-y.jpg]] |
