Ver Fonte

fix scene click events

Falko Schindler há 2 anos atrás
pai
commit
79a0be4409
3 ficheiros alterados com 14 adições e 3 exclusões
  1. 4 2
      nicegui/elements/scene.py
  2. 6 1
      nicegui/events.py
  3. 4 0
      nicegui/templates/index.html

+ 4 - 2
nicegui/elements/scene.py

@@ -2,7 +2,7 @@ from dataclasses import dataclass
 from typing import Callable, Dict, List, Optional, Union
 
 from ..element import Element
-from ..events import handle_event
+from ..events import SceneClickEventArguments, handle_event
 from ..vue import register_component
 from .scene_object3d import Object3D
 from .scene_objects import Scene as SceneObject
@@ -70,7 +70,9 @@ class Scene(Element):
         self.stack: List[Union[Object3D, SceneObject]] = [SceneObject()]
         self.camera: SceneCamera = SceneCamera()
         self.on('connect', self.handle_connect)
-        self.on('click3d', lambda msg: handle_event(on_click, msg['args']))
+        self.on('click3d',
+                lambda msg: handle_event(on_click,
+                                         SceneClickEventArguments(sender=self, client=self.client, args=msg['args'])))
 
     def handle_connect(self, _) -> None:
         self.run_method('init')

+ 6 - 1
nicegui/events.py

@@ -1,7 +1,7 @@
 import traceback
 from dataclasses import dataclass
 from inspect import signature
-from typing import TYPE_CHECKING, Any, Callable, List, Optional
+from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional
 
 from . import globals
 from .async_updater import AsyncUpdater
@@ -25,6 +25,11 @@ class ClickEventArguments(EventArguments):
     pass
 
 
+@dataclass
+class SceneClickEventArguments(ClickEventArguments):
+    args: Dict
+
+
 @dataclass
 class ColorPickEventArguments(EventArguments):
     color: str

+ 4 - 0
nicegui/templates/index.html

@@ -25,6 +25,10 @@
 
       const throttles = new Set();
       function throttle(callback, time, id) {
+        if (time <= 0) {
+          callback();
+          return;
+        }
         if (throttles.has(id)) return;
         throttles.add(id);
         callback();