12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- from nicegui import ui
- from . import doc
- @doc.demo(ui.refreshable)
- def main_demo() -> None:
- import random
- numbers = []
- @ui.refreshable
- def number_ui() -> None:
- ui.label(', '.join(str(n) for n in sorted(numbers)))
- def add_number() -> None:
- numbers.append(random.randint(0, 100))
- number_ui.refresh()
- number_ui()
- ui.button('Add random number', on_click=add_number)
- @doc.demo('Refreshable UI with parameters', '''
- Here is a demo of how to use the refreshable decorator to create a UI that can be refreshed with different parameters.
- ''')
- def refreshable_with_parameters():
- from datetime import datetime
- import pytz
- @ui.refreshable
- def clock_ui(timezone: str):
- ui.label(f'Current time in {timezone}:')
- ui.label(datetime.now(tz=pytz.timezone(timezone)).strftime('%H:%M:%S'))
- clock_ui('Europe/Berlin')
- ui.button('Refresh', on_click=clock_ui.refresh)
- ui.button('Refresh for New York', on_click=lambda: clock_ui.refresh('America/New_York'))
- ui.button('Refresh for Tokyo', on_click=lambda: clock_ui.refresh('Asia/Tokyo'))
- @doc.demo('Refreshable UI for input validation', '''
- Here is a demo of how to use the refreshable decorator to give feedback about the validity of user input.
- ''')
- def input_validation():
- import re
- pwd = ui.input('Password', password=True, on_change=lambda: show_info.refresh())
- rules = {
- 'Lowercase letter': lambda s: re.search(r'[a-z]', s),
- 'Uppercase letter': lambda s: re.search(r'[A-Z]', s),
- 'Digit': lambda s: re.search(r'\d', s),
- 'Special character': lambda s: re.search(r"[!@#$%^&*(),.?':{}|<>]", s),
- 'min. 8 characters': lambda s: len(s) >= 8,
- }
- @ui.refreshable
- def show_info():
- for rule, check in rules.items():
- with ui.row().classes('items-center gap-2'):
- if check(pwd.value or ''):
- ui.icon('done', color='green')
- ui.label(rule).classes('text-xs text-green strike-through')
- else:
- ui.icon('radio_button_unchecked', color='red')
- ui.label(rule).classes('text-xs text-red')
- show_info()
- @doc.demo('Refreshable UI with reactive state', '''
- You can create reactive state variables with the `ui.state` function, like `count` and `color` in this demo.
- They can be used like normal variables for creating UI elements like the `ui.label`.
- Their corresponding setter functions can be used to set new values, which will automatically refresh the UI.
- ''')
- def reactive_state():
- @ui.refreshable
- def counter(name: str):
- with ui.card():
- count, set_count = ui.state(0)
- color, set_color = ui.state('black')
- ui.label(f'{name} = {count}').classes(f'text-{color}')
- ui.button(f'{name} += 1', on_click=lambda: set_count(count + 1))
- ui.select(['black', 'red', 'green', 'blue'],
- value=color, on_change=lambda e: set_color(e.value))
- with ui.row():
- counter('A')
- counter('B')
- doc.reference(ui.refreshable)
|