瀏覽代碼

fix handle_event (invoke callable handler without creating a task; remove update_view argument)

Falko Schindler 3 年之前
父節點
當前提交
0848558003
共有 3 個文件被更改,包括 15 次插入14 次删除
  1. 1 1
      nicegui/elements/button.py
  2. 1 1
      nicegui/elements/menu_item.py
  3. 13 12
      nicegui/events.py

+ 1 - 1
nicegui/elements/button.py

@@ -25,7 +25,7 @@ class Button(Element):
         self.text = text
         self.bind_text_to(self.view, 'label')
 
-        view.on('click', lambda *_: handle_event(on_click, ClickEventArguments(sender=self), update_view=True))
+        view.on('click', lambda *_: handle_event(on_click, ClickEventArguments(sender=self)))
 
     def set_text(self, text: str):
         self.text = text

+ 1 - 1
nicegui/elements/menu_item.py

@@ -20,6 +20,6 @@ class MenuItem(Element):
         """
         view = jp.QItem(text=text, clickable=True)
 
-        view.on('click', lambda *_: handle_event(on_click, ClickEventArguments(sender=self), update_view=True))
+        view.on('click', lambda *_: handle_event(on_click, ClickEventArguments(sender=self)))
 
         super().__init__(view)

+ 13 - 12
nicegui/events.py

@@ -196,17 +196,18 @@ class KeyEventArguments(EventArguments):
     modifiers: KeyboardModifiers
 
 
-def handle_event(handler: Optional[Union[Callable, Awaitable]], arguments: EventArguments, *, update_view: bool = False):
-    async def async_handler():
+def handle_event(handler: Optional[Union[Callable, Awaitable]], arguments: EventArguments):
+    try:
         if handler is None:
             return
-        try:
-            no_arguments = not signature(handler).parameters
-            call = handler() if no_arguments else handler(arguments)
-            if asyncio.iscoroutinefunction(handler):
-                await call
-            if update_view:
-                await arguments.sender.parent_view.update()
-        except Exception:
-            traceback.print_exc()
-    asyncio.get_event_loop().create_task(async_handler())
+        no_arguments = not signature(handler).parameters
+        call = handler() if no_arguments else handler(arguments)
+        if asyncio.iscoroutinefunction(handler):
+            async def async_handler():
+                try:
+                    await call
+                except Exception:
+                    traceback.print_exc()
+            asyncio.get_event_loop().create_task(async_handler())
+    except Exception:
+        traceback.print_exc()