main.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python3
  2. import re
  3. import docutils.core
  4. import api_docs_and_examples
  5. from nicegui import ui
  6. from traffic_tracking import TrafficChard as traffic_chart
  7. @ui.page('/', on_page_ready=api_docs_and_examples.create)
  8. async def index():
  9. # add docutils css to webpage
  10. ui.add_head_html(docutils.core.publish_parts('', writer_name='html')['stylesheet'])
  11. # avoid display:block for PyPI/Docker/GitHub badges
  12. ui.add_head_html('<style>p a img {display: inline; vertical-align: baseline}</style>')
  13. ui.html(
  14. '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-fork-ribbon-css/0.2.3/gh-fork-ribbon.min.css" />'
  15. '<style>.github-fork-ribbon:before { background-color: #999; }</style>'
  16. '<a class="github-fork-ribbon" href="https://github.com/zauberzeug/nicegui" data-ribbon="Fork me on GitHub" title="Fork me on GitHub">Fork me on GitHub</a>'
  17. )
  18. with ui.row().classes('flex w-full'):
  19. with open('README.md', 'r') as file:
  20. content = file.read()
  21. content = re.sub(r'(?m)^\<img.*\n?', '', content)
  22. ui.markdown(content).classes('w-6/12')
  23. with ui.column().classes('w-5/12 flex-center'):
  24. width = 450
  25. with ui.card(), ui.row().style(f'width:{width}px'):
  26. with ui.column():
  27. ui.button('Click me!', on_click=lambda: output.set_text('Click'))
  28. ui.checkbox('Check me!', on_change=lambda e: output.set_text('Checked' if e.value else 'Unchecked'))
  29. ui.switch('Switch me!', on_change=lambda e: output.set_text(
  30. 'Switched' if e.value else 'Unswitched'))
  31. ui.input('Text', value='abc', on_change=lambda e: output.set_text(e.value))
  32. ui.number('Number', value=3.1415927, format='%.2f', on_change=lambda e: output.set_text(e.value))
  33. with ui.column():
  34. ui.slider(min=0, max=100, value=50, step=0.1, on_change=lambda e: output.set_text(e.value))
  35. ui.radio(['A', 'B', 'C'], value='A', on_change=lambda e: output.set_text(e.value)).props('inline')
  36. ui.toggle(['1', '2', '3'], value='1', on_change=lambda e: output.set_text(e.value)).classes('mx-auto')
  37. ui.select({1: 'One', 2: 'Two', 3: 'Three'}, value=1,
  38. on_change=lambda e: output.set_text(e.value)).classes('mx-auto')
  39. with ui.column().classes('w-24'):
  40. ui.label('Output:')
  41. output = ui.label('').classes('text-bold')
  42. with ui.row().style('margin-top: 40px'):
  43. traffic_chart().style(f'width:{width}px;height:250px')
  44. ui.run()