浏览代码

#390 introduce textarea element

Falko Schindler 2 年之前
父节点
当前提交
57d6ad8844
共有 3 个文件被更改,包括 33 次插入0 次删除
  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 TabPanel as tab_panel
 from .elements.tabs import TabPanels as tab_panels
 from .elements.tabs import TabPanels as tab_panels
 from .elements.tabs import Tabs as tabs
 from .elements.tabs import Tabs as tabs
+from .elements.textarea import Textarea as textarea
 from .elements.time import Time as time
 from .elements.time import Time as time
 from .elements.toggle import Toggle as toggle
 from .elements.toggle import Toggle as toggle
 from .elements.tooltip import Tooltip as tooltip
 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})
                  validation={'Input too long': lambda value: len(value) < 20})
         result = ui.label()
         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)
     @example(ui.number, menu)
     def number_example():
     def number_example():
         ui.number(label='Number', value=3.1415927, format='%.2f',
         ui.number(label='Number', value=3.1415927, format='%.2f',