Selaa lähdekoodia

update ui.number

Falko Schindler 2 vuotta sitten
vanhempi
säilyke
7fa58fa8d1

+ 1 - 1
api_docs_and_examples.py

@@ -189,7 +189,7 @@ def create_full() -> None:
                  on_change=lambda e: input_result.set_text('you typed: ' + e.value))
         input_result = ui.label()
 
-    # @example(ui.number)
+    @example(ui.number, skip=False)
     def number_example():
         ui.number(label='Number', value=3.1415927, format='%.2f',
                   on_change=lambda e: number_result.set_text(f'you entered: {e.value}'))

+ 39 - 0
nicegui/elements/number.py

@@ -0,0 +1,39 @@
+from typing import Any, Callable, Optional
+
+from .mixins.value_element import ValueElement
+
+
+class Number(ValueElement):
+
+    def __init__(self,
+                 label: str = None, *,
+                 placeholder: str = None,
+                 value: float = None,
+                 format: str = None,
+                 on_change: Optional[Callable] = None) -> None:
+        """Number Input
+
+        :param label: displayed name for the number input
+        :param placeholder: text to show if no value is entered
+        :param value: the initial value of the field
+        :param format: a string like '%.2f' to format the displayed value
+        :param on_change: callback to execute when the input is confirmed by leaving the focus
+        """
+        self.format = format
+        super().__init__(tag='q-input', value=value, on_value_change=on_change)
+        self._props['type'] = 'number'
+        self._props['label'] = label
+        self._props['placeholder'] = placeholder
+
+    def _value_to_model(self, value: Any) -> Any:
+        if value is None:
+            return None
+        elif self.format is None:
+            return str(value)
+        elif value == '':
+            return 0
+        else:
+            return self.format % float(value)
+
+    def _value_to_event_value(self, value: Any) -> Any:
+        return float(value) if value else 0

+ 0 - 21
nicegui/elements/old/float_element.py

@@ -1,21 +0,0 @@
-from typing import Callable, Optional
-
-import justpy as jp
-
-from .value_element import ValueElement
-
-
-class FloatElement(ValueElement):
-
-    def __init__(self, view: jp.HTMLBaseComponent, *, value: float, format: str = None, on_change: Optional[Callable]):
-        self.format = format
-
-        super().__init__(view, value=value, on_change=on_change)
-
-    def value_to_view(self, value: float):
-        if value is None:
-            return None
-        elif self.format is None:
-            return str(value)
-        else:
-            return self.format % float(value)

+ 0 - 35
nicegui/elements/old/number.py

@@ -1,35 +0,0 @@
-from typing import Callable, Dict, Optional
-
-import justpy as jp
-
-from .float_element import FloatElement
-
-
-class Number(FloatElement):
-
-    def __init__(
-            self, label: str = None, *,
-            placeholder: str = None, value: float = None, format: str = None, on_change: Optional[Callable] = None):
-        """Number Input
-
-        :param label: displayed name for the number input
-        :param placeholder: text to show if no value is entered
-        :param value: the initial value of the field
-        :param format: a string like '%.2f' to format the displayed value
-        :param on_change: callback to execute when the input is confirmed by leaving the focus
-        """
-        view = jp.QInput(
-            type='number',
-            label=label,
-            placeholder=placeholder,
-            change=self.handle_change,
-            disable_input_event=True,
-            temp=False,
-        )
-
-        super().__init__(view, value=value, format=format, on_change=on_change)
-
-    def handle_change(self, msg: Dict):
-        msg['value'] = float(msg['value'])
-
-        return super().handle_change(msg)

+ 1 - 0
nicegui/ui.py

@@ -16,6 +16,7 @@ from .elements.label import Label as label
 from .elements.link import Link as link
 from .elements.link import LinkTarget as link_target
 from .elements.markdown import Markdown as markdown
+from .elements.number import Number as number
 from .elements.radio import Radio as radio
 from .elements.row import Row as row
 from .elements.select import Select as select