Browse Source

update ui.number

Falko Schindler 2 years ago
parent
commit
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))
                  on_change=lambda e: input_result.set_text('you typed: ' + e.value))
         input_result = ui.label()
         input_result = ui.label()
 
 
-    # @example(ui.number)
+    @example(ui.number, skip=False)
     def number_example():
     def number_example():
         ui.number(label='Number', value=3.1415927, format='%.2f',
         ui.number(label='Number', value=3.1415927, format='%.2f',
                   on_change=lambda e: number_result.set_text(f'you entered: {e.value}'))
                   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 Link as link
 from .elements.link import LinkTarget as link_target
 from .elements.link import LinkTarget as link_target
 from .elements.markdown import Markdown as markdown
 from .elements.markdown import Markdown as markdown
+from .elements.number import Number as number
 from .elements.radio import Radio as radio
 from .elements.radio import Radio as radio
 from .elements.row import Row as row
 from .elements.row import Row as row
 from .elements.select import Select as select
 from .elements.select import Select as select