Что такое Progress bar? Значение термина Progress bar
Progress bar (Индикатор процесса) – это элемент графического интерфейса пользователя, представляющий собой прямоугольную (в большинстве случаев) панель для отображения индексации ходи или выполнения какой либо задачи, например загрузки файла по сети. Обычно бегунок индикатора процесса заполняется слева направо. Часто встречается текстовое сопровождение выполненных процентов. Такие элементы используются в том случае, если масштаб задачи известен, либо ход выполнения задачи требует отображения информации.
Помогло? Делись!
Реклама:
Представляем
систему управления сайтами
NetCat
CMS NetCat — профессиональная коммерческая система управления Интернет-сайтами, один из лидеров на российском рынке веб-разработок.
Наша компания является сертифицированным партнером и рекомендуемым разработчиком сайтов на NetCat во Владивостоке.
В настоящее время большинство новых сайтов мы создаем на основе ее программной платформы.
Быстрый поиск по сайту:
© Аниматика 2005 — 2023
690002 , г.Владивосток , пр-т Острякова, 5, оф.306
Тел.: +7 (423) 206-00-23
E-mail: info@animatika.ru
Отслеживаем прогресс выполнения в Python
Индикаторы прогресса (progress bar) — визуальное отображение процесса работы. Они избавляют нас от необходимости беспокоиться о том, не завис ли скрипт, дают интуитивное представление о скорости его выполнения и подсказывают, сколько времени осталось до завершения.
Человек ранее не использовавший индикаторы прогресса может предположить, что их внедрение может сильно усложнить код. К счастью, это не так. Небольшие примеры ниже покажут, как быстро и просто начать отслеживать прогресс в консоли или в интерфейсе быстро набирающей популярность графической библиотеки PySimpleGUI.
Используем Progress
Первым у нас идёт модуль Progress.
Всё, что от вас потребуется, это указать количество ожидаемых итераций, тип индикатора и вызывать функцию при каждой итерации:
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
Следующей на очереди идёт библиотека tqdm.
Быстрый и расширяемый индикатор прогресса для Python и CLI
Всего один вызов функции понадобится для получения результата аналогичного предыдущему:
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
Ещё один вариант синтаксиса, побольше дефолтных анимаций, чем в предыдущих примерах:
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 индикатор прогресса для скрипта
Иногда возникает необходимость предоставить конечному пользователю графический индикатор.
Сколько кода нужно, чтобы достигнуть такого результата? Немного:
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.
Вот как это сделать:
import PySimpleGUI as sg import time mylist = [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()
Заключение
Как видите, нет ничего сложного в добавлении информации о прогрессе выполнения: кода немного, а отзывчивость повышается очень сильно. Используйте индикаторы, чтобы больше никогда не гадать, завис ли процесс или нет!
- progress bar
- индикатор прогресса
Прогресс бар что это
Элемент, который показывает ход выполнения задачи.
Время чтения: меньше 5 мин
Открыть/закрыть навигацию по статье
Контрибьюторы:
- Татьяна Фокина ,
- Светлана Коробцева
Обновлено 8 ноября 2023
Кратко
Скопировать ссылку «Кратко» Скопировано
Тег создаёт индикатор выполнения задачи. Обычно выглядит как прогресс-бар.
В тег по умолчанию встроена роль progressbar , которая делает загрузку «живой» областью. Это область страницы, об изменениях в которой пользователи скринридеров узнают автоматически, без перехода к ней.
Пример
Скопировать ссылку «Пример» Скопировано
Прогресс-бар с известным максимальным значением:
label for="progress">Загрузка файлаlabel> progress id="progress" value="0" max="100">progress>
Задача выполняется, но неизвестно, сколько займёт времени. В примере связываем прогресс-бар с фидом, где обновляется содержимое, при помощи атрибута aria — describedby .
div role="feed" aria-busy="true" aria-describedby="progress"> div> progress id="progress" aria-label="Фид обновляется">progress>
Как понять
Скопировать ссылку "Как понять" Скопировано
Тег стоит использовать для вывода информации о процессе, который выполняется и должен завершиться. Например:
- сообщить о количестве свободного места на диске;
- вывести допустимые пределы громкости;
- показать уровень загруженности интернет-канала;
- прогресс загрузки файла;
- процесс соединения абонентов.
Если показываете пользователю числовое значение в заданном диапазоне, используйте тег . Для таймера используйте специальную ARIA-роль timer .
Как пишется
Скопировать ссылку "Как пишется" Скопировано
- max — максимальное значение. Должно быть положительным, допускаются дробные значения. По умолчанию равно 1 .
- value — текущее значение. Положительное число, допускаются дробные значения. Должно находиться в пределах между 0 и значением атрибута max . Если атрибут не прописан, линия внутри прогресс-бара будет перемещаться от одного края к другому. Это показывает, что задача выполняется, но неизвестно, сколько займёт времени.
Минимальное значение min всегда равно 0 , и этот атрибут нельзя задавать .
Чтобы прогресс-бар был полностью доступен для всех пользователей, изменяйте значение value при помощи JavaScript. В этом случае скринридеры расскажут о процессе загрузки в процентах или с помощью особого звукового оповещения.
Также не забывайте подписывать, что сейчас загружается. Для видимой подписи используйте тег , а для видимой только пользователям вспомогательных технологий — aria - label .
--> Загрузка файла value="0" max="100" aria-label="Загрузка файла">--> label for="progress">Загрузка файлаlabel> progress id="progress" value="0" max="100">progress> label> Загрузка файла progress id="progress" value="0" max="100">progress> label> progress id="progress" value="0" max="100" aria-label="Загрузка файла" > progress>
На практике
Скопировать ссылку "На практике" Скопировано
Борис Демченко советует
Скопировать ссылку "Борис Демченко советует" Скопировано
Внешний вид элемента может быть разным — это зависит от браузера и операционной системы устройства пользователя. Стандартный прогресс-бар на устройствах с macOS и Windows имеет голубую заливку в Chrome, Safari и Firefox. Только Edge использует серый цвет. Сильнее всего элемент отличается в Safari. Он гораздо уже остальных.

Если нужно, чтобы прогресс-бар выглядел везде одинаково, то стилизуйте его. Например, следующее правило убирает границу элемента, которая есть по умолчанию, и меняет цвет фона:
progress border: none; background-color: #FF8630;>progress border: none; background-color: #FF8630; >
В Firefox эти стили не затронут бегунок, поэтому дополнительно используйте вендорный префикс -moz . Для стилизации в Chrome и Safari как самого элемента, так и его бегунка, используйте префиксы -webkit .
Так что для того, чтобы прогресс-бар и бегунок выглядели одинаково во всех основных браузерах, нам потребуется добавить следующие правила:
progress::-moz-progress-bar border: none; background-color: #FF8630;> progress::-webkit-progress-bar border: none; background-color: #FF8630;> progress::-webkit-progress-value background-color: #FF8630;>progress::-moz-progress-bar border: none; background-color: #FF8630; > progress::-webkit-progress-bar border: none; background-color: #FF8630; > progress::-webkit-progress-value background-color: #FF8630; >
Прогресс-бар
Прогресс-бар — это индикатор, который отображает прогресс выполнения задачи.

В библиотеке элементов Контура прогресс-бар имеет горизонтальный вид, но вообще он может быть любой формы. Например, Microsoft использует круглый индикатор и называет его ProgressRing:

Используйте прогресс-бар, если процесс в среднем длится дольше 10 секунд. Понимание того, когда процесс завершится, дает ощущение контроля и улучшает пользовательский опыт.
Если это уместно, дайте возможность отменить задачу и сделайте прогресс-бар не модальным, чтобы он не блокировал работу в сервисе.

Если процесс происходит на стороне сервера и можно закрыть окно браузера — сообщите об этом пользователю.
Создание прогресс-бара требует больше усилий, чем подключение спиннера, и оправдано, если сценарий частотный.
Если получить данные о ходе выполнения задачи невозможно, лучше использовать спиннер. Имитировать работу прогресс-бара можно, только если он носит дополнительный и иллюстративный характер. Например, глобальный лоадер сопровождает загрузку контента, его задача ― заполнить паузу до появления первых элементов страницы, а не дать точную обратную связь.
Принцип работы
Прогресс-бар делится на отрезки по количеству подзадач пропорционально среднему времени их выполнения. Например, чтобы выполнить команду пользователя, нужно сделать три подзадачи. Известно, что первые две в среднем занимают по 10 секунд, третья — 5 секунд. Значит, должны получиться такие отрезки:

0 % → 40 % → 80 % → 100 %
Отрезок заполняется с постоянной скоростью, равной: длина отрезка / среднее время. Если отрезок заполнился, а подзадача все еще выполняется, прогресс-бар останавливается и ждет завершения подзадачи. Если подзадача выполнится раньше среднего времени, отрезок заполняется с ускорением easeOutQuint.
Последний отрезок заполняется до 75 % и ждет, пока завершится подзадача, затем заполняется с ускорением.
Если среднее время выполнения задач неизвестно, то прогресс-бар следует разделить на отрезки равной длины, а за среднее время взять минимально ожидаемое время.
Если задача не имеет подзадач, то прогресс-бар может равномерно заполняться до значения 75 %, после чего ждать информации о завершении задачи. Фактически такой прогресс-бар является имитацией и малоинформативен для пользователей, лучше, когда есть три и больше подзадач.
Заполнение прогресс-бара всегда должно только расти, но не уменьшаться. Откатывающийся назад прогресс-бар путает пользователей и снижает доверие к интерфейсу.
Цвет
Прогресс-бар можно красить в цвет продукта или ссылок в интерфейсе.
Подпись
Быстрые процессы не нужно сопровождать подписью. Но чем дольше процесс, тем больше подробностей о ходе выполнения задачи нужно сообщать.
Укажите, сколько времени осталось до конца задачи. Округляйте в большую сторону: если процесс завершится раньше, пользователю будет приятно. Обратная ситуация вызовет негативные эмоции и снизит доверие к интерфейсу.

Укажите, какой именно шаг выполняется в данный момент. Это объяснит пользователю, почему процесс такой долгий, и поможет скоротать время.
