Răsfoiți Sursa

#390 introduce textarea element

Falko Schindler 2 ani în urmă
părinte
comite
57d6ad8844
3 a modificat fișierele cu 33 adăugiri și 0 ștergeri
  1. 26 0
      nicegui/elements/textarea.py
  2. 1 0
      nicegui/ui.py
  3. 6 0
      website/reference.py

+ 26 - 0
nicegui/elements/textarea.py

@@ -0,0 +1,26 @@
+from typing import Callable, Dict, Optional
+
+from .input import Input
+
+
+class Textarea(Input):
+
+    def __init__(self,
+                 label: Optional[str] = None, *,
+                 placeholder: Optional[str] = None,
+                 value: str = '',
+                 on_change: Optional[Callable] = None,
+                 validation: Dict[str, Callable] = {}) -> None:
+        """Textarea
+
+        This element is based on Quasar's `QInput <https://quasar.dev/vue-components/input>`_ component.
+        The ``type`` is set to ``textarea`` to create a multi-line text input.
+
+        :param label: displayed name for the textarea
+        :param placeholder: text to show if no value is entered
+        :param value: the initial value of the field
+        :param on_change: callback to execute when the input is confirmed by leaving the focus
+        :param validation: dictionary of validation rules, e.g. ``{'Too short!': lambda value: len(value) < 3}``
+        """
+        super().__init__(label, placeholder=placeholder, value=value, on_change=on_change, validation=validation)
+        self._props['type'] = 'textarea'

+ 1 - 0
nicegui/ui.py

@@ -48,6 +48,7 @@ from .elements.tabs import Tab as tab
 from .elements.tabs import TabPanel as tab_panel
 from .elements.tabs import TabPanels as tab_panels
 from .elements.tabs import Tabs as tabs
+from .elements.textarea import Textarea as textarea
 from .elements.time import Time as time
 from .elements.toggle import Toggle as toggle
 from .elements.tooltip import Tooltip as tooltip

+ 6 - 0
website/reference.py

@@ -134,6 +134,12 @@ def create_full(menu: ui.element) -> None:
                  validation={'Input too long': lambda value: len(value) < 20})
         result = ui.label()
 
+    @example(ui.textarea, menu)
+    def textarea_example():
+        ui.textarea(label='Text', placeholder='start typing',
+                    on_change=lambda e: result.set_text('you typed: ' + e.value))
+        result = ui.label()
+
     @example(ui.number, menu)
     def number_example():
         ui.number(label='Number', value=3.1415927, format='%.2f',