Procházet zdrojové kódy

feat(on_scroll): new scroll event handle functional

Eli Khazan před 1 rokem
rodič
revize
cf3479c662
2 změnil soubory, kde provedl 15 přidání a 9 odebrání
  1. 13 7
      nicegui/elements/scroll_area.py
  2. 2 2
      nicegui/events.py

+ 13 - 7
nicegui/elements/scroll_area.py

@@ -1,7 +1,8 @@
-from typing import Optional, Callable, Any
+from dataclasses import fields
+from typing import Optional, Callable, Any, Dict
 
 from ..element import Element
-from ..events import handle_event, ScrollEventArguments
+from ..events import ScrollEventArguments, ScrollInfo
 
 
 class ScrollArea(Element):
@@ -15,9 +16,14 @@ class ScrollArea(Element):
         super().__init__('q-scroll-area')
         self._classes = ['nicegui-scroll']
 
-        def scroll_handle(info):
-            handle_event(on_scroll, ScrollEventArguments(
-                sender=self, client=self.client, info=info))
-
         if on_scroll:
-            self.on('scroll', scroll_handle)
+            self.on('scroll',
+                    lambda x: self._handle_scroll(on_scroll=on_scroll, msg=x), args=[x.name for x in fields(ScrollInfo)]
+                    )
+
+    def _handle_scroll(self, on_scroll: Callable, msg: Dict):
+        on_scroll(ScrollEventArguments(
+            sender=self,
+            client=self.client,
+            info=ScrollInfo(**msg['args'])
+        ))

+ 2 - 2
nicegui/events.py

@@ -270,11 +270,11 @@ class KeyEventArguments(EventArguments):
 
 @dataclass(**KWONLY_SLOTS)
 class ScrollInfo:
-    verticalPosition: int
+    verticalPosition: float
     verticalPercentage: float
     verticalSize: int
     verticalContainerSize: int
-    horizontalPosition: int
+    horizontalPosition: float
     horizontalPercentage: float
     horizontalSize: int
     horizontalContainerSize: int