summaryrefslogtreecommitdiff
path: root/PYTHON/PROGRESS BAR.md
diff options
context:
space:
mode:
Diffstat (limited to 'PYTHON/PROGRESS BAR.md')
-rw-r--r--PYTHON/PROGRESS BAR.md138
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 @@
+#
+
+![](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]]