Browse Source

Merge branch 'ros2_example' of github.com:zauberzeug/nicegui into ros2_example

Rodja Trappe 1 năm trước cách đây
mục cha
commit
8cbde557b4

+ 5 - 5
nicegui/elements/joystick.py

@@ -1,4 +1,4 @@
-from typing import Any, Callable, Optional
+from typing import Any, Callable, Dict, Optional
 
 from ..dependencies import register_component
 from ..element import Element
@@ -29,21 +29,21 @@ class Joystick(Element):
         self._props['options'] = options
         self.active = False
 
-        def handle_start(msg):
+        def handle_start() -> None:
             self.active = True
             handle_event(on_start, JoystickEventArguments(sender=self,
                                                           client=self.client,
                                                           action='start'))
 
-        def handle_move(msg):
+        def handle_move(msg: Dict) -> None:
             if self.active:
                 handle_event(on_move, JoystickEventArguments(sender=self,
                                                              client=self.client,
                                                              action='move',
                                                              x=msg['args']['data']['vector']['x'],
-                                                             y=msg['args']['data']['vector']['y'])),
+                                                             y=msg['args']['data']['vector']['y']))
 
-        def handle_end(msg):
+        def handle_end() -> None:
             self.active = False
             handle_event(on_end, JoystickEventArguments(sender=self,
                                                         client=self.client,

+ 1 - 0
nicegui/elements/separator.py

@@ -7,6 +7,7 @@ class Separator(Element):
         """Separator
 
         A separator for cards, menus and other component containers.
+        Similar to HTML's <hr> tag.
         """
         super().__init__('q-separator')
         self._classes = ['nicegui-separator']

+ 1 - 0
tests/test_storage.py

@@ -89,6 +89,7 @@ async def test_access_user_storage_from_fastapi(screen: Screen):
         response = await http_client.get(f'http://localhost:{PORT}/api')
         assert response.status_code == 200
         assert response.text == '"OK"'
+        await asyncio.sleep(0.5)  # wait for storage to be written
         assert next(Path('.nicegui').glob('storage_user_*.json')).read_text() == '{"msg": "yes"}'
 
 

+ 1 - 0
website/documentation.py

@@ -165,6 +165,7 @@ def create_full() -> None:
         ui.button('Clear', on_click=container.clear)
 
     load_demo(ui.expansion)
+    load_demo(ui.separator)
     load_demo(ui.splitter)
     load_demo('tabs')
     load_demo(ui.stepper)

+ 32 - 0
website/more_documentation/log_documentation.py

@@ -1,4 +1,5 @@
 from nicegui import ui
+from website.documentation_tools import text_demo
 
 
 def main_demo() -> None:
@@ -6,3 +7,34 @@ def main_demo() -> None:
 
     log = ui.log(max_lines=10).classes('w-full h-20')
     ui.button('Log time', on_click=lambda: log.push(datetime.now().strftime('%X.%f')[:-5]))
+
+
+def more() -> None:
+    @text_demo('Attach to a logger', '''
+        You can attach a `ui.log` element to a Python logger object so that log messages are pushed to the log element.
+    ''')
+    def logger_handler():
+        import logging
+        from datetime import datetime
+
+        logger = logging.getLogger()
+
+        class LogElementHandler(logging.Handler):
+            """A logging handler that emits messages to a log element."""
+
+            def __init__(self, element: ui.log, level: int = logging.NOTSET) -> None:
+                self.element = element
+                super().__init__(level)
+
+            def emit(self, record: logging.LogRecord) -> None:
+                try:
+                    msg = self.format(record)
+                    self.element.push(msg)
+                except (KeyboardInterrupt, SystemExit):
+                    raise
+                except:
+                    self.handleError(record)
+
+        log = ui.log(max_lines=10).classes('w-full')
+        logger.addHandler(LogElementHandler(log))
+        ui.button('Log time', on_click=lambda: logger.warning(datetime.now().strftime('%X.%f')[:-5]))

+ 7 - 0
website/more_documentation/separator_documentation.py

@@ -0,0 +1,7 @@
+from nicegui import ui
+
+
+def main_demo() -> None:
+    ui.label('text above')
+    ui.separator()
+    ui.label('text below')