def text_input( self, label: str, value: str = "", max_chars: Optional[int] = None, key: Optional[Key] = None, type: str = "default", help: Optional[str] = None, autocomplete: Optional[str] = None, on_change: Optional[WidgetCallback] = None, args: Optional[WidgetArgs] = None, kwargs: Optional[WidgetKwargs] = None, *, # This makes placeholder a keyword-only argument placeholder: Optional[str] = None, ) -> str: """Display a single-line text input widget. Parameters ---------- label : str A short label explaining to the user what this input is for. value : any The text value of this widget when it first renders. This will be cast to str internally. max_chars : int or None Max number of characters allowed in text input. key : str or int An optional string or integer to use as the unique key for the widget. If this is omitted, a key will be generated for the widget based on its content. Multiple widgets of the same type may not share the same key. type : str The type of the text input. This can be either "default" (for a regular text input), or "password" (for a text input that masks the user's typed value). Defaults to "default". help : str An optional tooltip that gets displayed next to the input. autocomplete : str An optional value that will be passed to the <input> element's autocomplete property. If unspecified, this value will be set to "new-password" for "password" inputs, and the empty string for "default" inputs. For more details, see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete on_change : callable An optional callback invoked when this text_input's value changes. args : tuple An optional tuple of args to pass to the callback. kwargs : dict An optional dict of kwargs to pass to the callback. placeholder : str or None An optional string displayed when the text input is empty. If None, no text is displayed. This is a keyword only argument. Returns ------- str The current value of the text input widget. Example ------- >>> title = st.text_input('Movie title', 'Life of Brian') >>> st.write('The current movie title is', title) """ key = to_key(key) check_callback_rules(self.dg, on_change) check_session_state_rules(default_value=None if value == "" else value, key=key) text_input_proto = TextInputProto() text_input_proto.label = label text_input_proto.default = str(value) text_input_proto.form_id = current_form_id(self.dg) if help is not None: text_input_proto.help = dedent(help) if max_chars is not None: text_input_proto.max_chars = max_chars if placeholder is not None: text_input_proto.placeholder = str(placeholder) if type == "default": text_input_proto.type = TextInputProto.DEFAULT elif type == "password": text_input_proto.type = TextInputProto.PASSWORD else: raise StreamlitAPIException( "'%s' is not a valid text_input type. Valid types are 'default' and 'password'." % type ) # Marshall the autocomplete param. If unspecified, this will be # set to "new-password" for password inputs. if autocomplete is None: autocomplete = "new-password" if type == "password" else "" text_input_proto.autocomplete = autocomplete def deserialize_text_input(ui_value, widget_id="") -> str: return str(ui_value if ui_value is not None else value) current_value, set_frontend_value = register_widget( "text_input", text_input_proto, user_key=key, on_change_handler=on_change, args=args, kwargs=kwargs, deserializer=deserialize_text_input, serializer=lambda x: x, ) if set_frontend_value: text_input_proto.value = current_value text_input_proto.set_value = True self.dg._enqueue("text_input", text_input_proto) return cast(str, current_value)
def _text_input( self, label: str, value: str = "", max_chars: Optional[int] = None, key: Optional[Key] = None, type: str = "default", help: Optional[str] = None, autocomplete: Optional[str] = None, on_change: Optional[WidgetCallback] = None, args: Optional[WidgetArgs] = None, kwargs: Optional[WidgetKwargs] = None, *, # keyword-only arguments: placeholder: Optional[str] = None, disabled: bool = False, ctx: Optional[ScriptRunContext] = None, ) -> str: key = to_key(key) check_callback_rules(self.dg, on_change) check_session_state_rules(default_value=None if value == "" else value, key=key) text_input_proto = TextInputProto() text_input_proto.label = label text_input_proto.default = str(value) text_input_proto.form_id = current_form_id(self.dg) text_input_proto.disabled = disabled if help is not None: text_input_proto.help = dedent(help) if max_chars is not None: text_input_proto.max_chars = max_chars if placeholder is not None: text_input_proto.placeholder = str(placeholder) if type == "default": text_input_proto.type = TextInputProto.DEFAULT elif type == "password": text_input_proto.type = TextInputProto.PASSWORD else: raise StreamlitAPIException( "'%s' is not a valid text_input type. Valid types are 'default' and 'password'." % type ) # Marshall the autocomplete param. If unspecified, this will be # set to "new-password" for password inputs. if autocomplete is None: autocomplete = "new-password" if type == "password" else "" text_input_proto.autocomplete = autocomplete def deserialize_text_input(ui_value, widget_id="") -> str: return str(ui_value if ui_value is not None else value) current_value, set_frontend_value = register_widget( "text_input", text_input_proto, user_key=key, on_change_handler=on_change, args=args, kwargs=kwargs, deserializer=deserialize_text_input, serializer=lambda x: x, ctx=ctx, ) if set_frontend_value: text_input_proto.value = current_value text_input_proto.set_value = True self.dg._enqueue("text_input", text_input_proto) return cast(str, current_value)