import time import numpy as np import pandas as pd import panel as pn from panel.widgets import Tqdm pn.extension() tqdm = Tqdm() def run_loop(*events, timeout=0.2): for i in tqdm(range(0,10), desc="My loop bar", leave=True, colour='#666666'): if pn.state._is_pyodide: # time.sleep does not work in pyodide np.random.random((10**6, 30)) else: time.sleep(timeout) tqdm button = pn.widgets.Button(name="Run Loop", button_type="success") button.on_click(run_loop) button tqdm_outer = Tqdm() tqdm_inner = Tqdm(margin=(0, 0, 0, 20)) def run_nested_loop(*events, timeout=0.05): for i in tqdm_outer(range(10)): for j in tqdm_inner(range(10)): if pn.state._is_pyodide: # time.sleep does not work in pyodide np.random.random((10**6, 30)) else: time.sleep(timeout) run_nested_loop(timeout=0.01) pn.Column(tqdm_outer, tqdm_inner) button = pn.widgets.Button(name="Run Nested Loop", button_type="success") button.on_click(run_nested_loop) button tqdm_pandas = Tqdm(width=500) # Register Pandas. This gives DataFrame.progress_apply method tqdm_pandas.pandas(desc="Pandas Progress") df = pd.DataFrame(np.random.randint(0, 100, (100000, 600))) def run_df(*events): df.progress_apply(lambda x: x**2) run_df() tqdm_pandas pandas_button = pn.widgets.Button(name="Run Pandas Apply", button_type="success") pandas_button.on_click(run_df) pandas_button