|
@@ -14,6 +14,7 @@ class Input(ValueElement):
|
|
|
password: bool = False,
|
|
|
password_toggle_button: bool = False,
|
|
|
on_change: Optional[Callable] = None,
|
|
|
+ autocomplete: list,
|
|
|
validation: Dict[str, Callable] = {}) -> None:
|
|
|
"""Text Input
|
|
|
|
|
@@ -32,6 +33,7 @@ class Input(ValueElement):
|
|
|
:param password: whether to hide the input (default: False)
|
|
|
:param password_toggle_button: whether to show a button to toggle the password visibility (default: False)
|
|
|
:param on_change: callback to execute when the input is confirmed by leaving the focus
|
|
|
+ :param autocomplete: list of options
|
|
|
:param validation: dictionary of validation rules, e.g. ``{'Too short!': lambda value: len(value) < 3}``
|
|
|
"""
|
|
|
super().__init__(tag='q-input', value=value, on_value_change=on_change)
|
|
@@ -51,6 +53,20 @@ class Input(ValueElement):
|
|
|
|
|
|
self.validation = validation
|
|
|
|
|
|
+ if autocomplete is not None:
|
|
|
+ def AutoCompleteInput():
|
|
|
+ global wordcomplete
|
|
|
+ if len(self.value) > 1:
|
|
|
+ for item in autocomplete:
|
|
|
+ if item.startswith(self.value):
|
|
|
+ self.props(f'shadow-text="{item[len(self.value):]}"')
|
|
|
+ wordcomplete = item
|
|
|
+ else:
|
|
|
+ self.props(f'shadow-text=" "')
|
|
|
+
|
|
|
+ self.on("keyup", AutoCompleteInput)
|
|
|
+ self.on("keydown.tab", lambda: self.set_value(wordcomplete))
|
|
|
+
|
|
|
def on_value_change(self, value: Any) -> None:
|
|
|
super().on_value_change(value)
|
|
|
for message, check in self.validation.items():
|