123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from nicegui import ui
- from ..documentation_tools import text_demo
- 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)
- def more() -> None:
- @text_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'))
- @text_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()
|