#!/usr/bin/python3 import logging import time logging.basicConfig(level=logging.INFO) _logger = logging.getLogger(__name__) # Usage with iterable (known length) items = range(50) pbar1 = ProgressBar(name="Task1", iterable=items, filled_char="#", empty_char="-") for item in pbar1: time.sleep(0.05) ProgressBar.display_bars() # Updates all ProgressBar instances # Multiple progress bars in nested loops items2 = range(30) pbar2 = ProgressBar(name="Task2", iterable=items2, interval=0.7) pbar3 = ProgressBar(name="Task3", total=20, filled_char="*", empty_char=".") for item in pbar2: time.sleep(0.1) pbar3.update(item % 20) # Manual update for pbar3, triggers display ProgressBar.display_bars() # Updates both pbar2 and pbar3 # Iterable with unknown length (generator) def my_generator(): for i in range(20): yield i time.sleep(0.2) pbar4 = ProgressBar(name="Generator", iterable=my_generator()) for item in pbar4: ProgressBar.display_bars() # Manual update without iterable pbar5 = ProgressBar(name="Manual", total=20, output_func=lambda msg: print(f"CUSTOM: {msg}")) for i in range(21): pbar5.update(i) # Triggers display if interval elapsed time.sleep(0.2)