# ![](https://habrastorage.org/getpro/habr/post_images/466/0af/83f/4660af83f239a7d8e1f14a02fb8ed13d.gif) Зачем нужны индикаторы прогресса? Индикаторы прогресса (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() ``` Результат работы: ![](https://habrastorage.org/getpro/habr/post_images/f89/560/66b/f8956066bc8771df24f3b195b73e9fb1.gif) Есть индикаторы на любой вкус: ![](https://habrastorage.org/getpro/habr/post_images/466/0af/83f/4660af83f239a7d8e1f14a02fb8ed13d.gif) # Используем 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) ``` Получаем: ![](https://habrastorage.org/getpro/habr/post_images/77a/31b/de3/77a31bde39a1237549def40677d7d653.gif) Само собой, в комплекте идёт куча настроек и опций. # Используем 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) ``` Результат: ![](https://habrastorage.org/getpro/habr/post_images/c60/529/2a0/c605292a0763b239ae950fc4fff0bfec.gif) # GUI индикатор прогресса для скрипта Иногда возникает необходимость предоставить конечному пользователю графический индикатор. ![](https://habrastorage.org/getpro/habr/post_images/f8a/fd7/70b/f8afd770b2c1c74dfac23dd492c686f5.gif) Сколько кода нужно, чтобы достигнуть такого результата? Немного: ```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). ![](https://habrastorage.org/getpro/habr/post_images/580/d8d/0a3/580d8d0a3e852ec2ef74db199755f2f6.gif) Вот как это сделать: ```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]]