Răsfoiți Sursa

code review

Falko Schindler 1 an în urmă
părinte
comite
1ec7149da9
2 a modificat fișierele cu 12 adăugiri și 14 ștergeri
  1. 9 12
      nicegui/elements/number.py
  2. 3 2
      website/more_documentation/number_documentation.py

+ 9 - 12
nicegui/elements/number.py

@@ -1,3 +1,4 @@
+import math
 from typing import Any, Callable, Dict, Optional
 from typing import Any, Callable, Dict, Optional
 
 
 from ..events import GenericEventArguments
 from ..events import GenericEventArguments
@@ -40,8 +41,7 @@ class Number(ValidationElement, DisableableElement):
         :param format: a string like "%.2f" to format the displayed value
         :param format: a string like "%.2f" to format the displayed value
         :param on_change: callback to execute when the value changes
         :param on_change: callback to execute when the value changes
         :param validation: dictionary of validation rules, e.g. ``{'Too large!': lambda value: value < 3}``
         :param validation: dictionary of validation rules, e.g. ``{'Too large!': lambda value: value < 3}``
-        :param integer: whether to return float or integer
-
+        :param integer: whether to restrict the value to integers (default: `False`)
         """
         """
         self.format = format
         self.format = format
         self.integer = integer
         self.integer = integer
@@ -90,16 +90,13 @@ class Number(ValidationElement, DisableableElement):
 
 
     def sanitize(self) -> None:
     def sanitize(self) -> None:
         """Sanitize the current value to be within the allowed limits."""
         """Sanitize the current value to be within the allowed limits."""
-        if self.value is None and 'clearable' in self._props:
-            self.set_value(None)
+        value = float(self.value or 0)
+        value = max(value, self.min)
+        value = min(value, self.max)
+        if self.integer:
+            self.set_value(int(math.floor(value)))
         else:
         else:
-            value = float(self.value or 0)
-            value = max(value, self.min)
-            value = min(value, self.max)
-            if self.integer:
-                self.set_value(int(math.floor(value)))
-            else:
-                self.set_value(float(self.format % value) if self.format else value)
+            self.set_value(float(self.format % value) if self.format else value)
 
 
     def _event_args_to_value(self, e: GenericEventArguments) -> Any:
     def _event_args_to_value(self, e: GenericEventArguments) -> Any:
         if not e.args:
         if not e.args:
@@ -120,6 +117,6 @@ class Number(ValidationElement, DisableableElement):
 
 
     def _value_to_event_value(self, value: Any) -> Any:
     def _value_to_event_value(self, value: Any) -> Any:
         if self.integer:
         if self.integer:
-            return int(math.floor(value))
+            return int(math.floor(value)) if value else 0
         else:
         else:
             return float(value) if value else 0
             return float(value) if value else 0

+ 3 - 2
website/more_documentation/number_documentation.py

@@ -19,8 +19,9 @@ def more() -> None:
         ui.label().bind_text_from(i, 'value')
         ui.label().bind_text_from(i, 'value')
 
 
     @text_demo('Integer', '''
     @text_demo('Integer', '''
-       Coerce the returned value to be integer instead of the default float.    
+        You can coerce an integer value instead of the default float using the `integer` parameter.
     ''')
     ''')
     def integer():
     def integer():
         i = ui.number(value=38)
         i = ui.number(value=38)
-        ui.button('Check number type', on_click=lambda: ui.notify(f'{i.value=} is of type {type(i.value)}'))
+        ui.button('Check number type',
+                  on_click=lambda: ui.notify(f'{i.value=} is of type {type(i.value)}'))