def selectbox( self, label: str, options: OptionSequence, index: int = 0, format_func: Callable[[Any], str] = str, key: Optional[Key] = None, help: Optional[str] = None, on_change: Optional[WidgetCallback] = None, args: Optional[WidgetArgs] = None, kwargs: Optional[WidgetKwargs] = None, ) -> Any: """Display a select widget. Parameters ---------- label : str A short label explaining to the user what this select widget is for. options : Sequence, numpy.ndarray, pandas.Series, pandas.DataFrame, or pandas.Index Labels for the select options. This will be cast to str internally by default. For pandas.DataFrame, the first column is selected. index : int The index of the preselected option on first render. format_func : function Function to modify the display of the labels. It receives the option as an argument and its output will be cast to str. 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. help : str An optional tooltip that gets displayed next to the selectbox. on_change : callable An optional callback invoked when this selectbox'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. Returns ------- any The selected option Example ------- >>> option = st.selectbox( ... 'How would you like to be contacted?', ... ('Email', 'Home phone', 'Mobile phone')) >>> >>> st.write('You selected:', option) """ key = to_key(key) check_callback_rules(self.dg, on_change) check_session_state_rules(default_value=None if index == 0 else index, key=key) opt = ensure_indexable(options) if not isinstance(index, int): raise StreamlitAPIException( "Selectbox Value has invalid type: %s" % type(index).__name__) if len(opt) > 0 and not 0 <= index < len(opt): raise StreamlitAPIException( "Selectbox index must be between 0 and length of options") selectbox_proto = SelectboxProto() selectbox_proto.label = label selectbox_proto.default = index selectbox_proto.options[:] = [ str(format_func(option)) for option in opt ] selectbox_proto.form_id = current_form_id(self.dg) if help is not None: selectbox_proto.help = dedent(help) def deserialize_select_box(ui_value, widget_id=""): idx = ui_value if ui_value is not None else index return opt[idx] if len(opt) > 0 and opt[idx] is not None else None def serialize_select_box(v): if len(opt) == 0: return 0 return index_(opt, v) current_value, set_frontend_value = register_widget( "selectbox", selectbox_proto, user_key=key, on_change_handler=on_change, args=args, kwargs=kwargs, deserializer=deserialize_select_box, serializer=serialize_select_box, ) if set_frontend_value: selectbox_proto.value = serialize_select_box(current_value) selectbox_proto.set_value = True self.dg._enqueue("selectbox", selectbox_proto) return cast(str, current_value)
def _selectbox( self, label: str, options: OptionSequence, index: int = 0, format_func: Callable[[Any], Any] = str, key: Optional[Key] = None, help: Optional[str] = None, on_change: Optional[WidgetCallback] = None, args: Optional[WidgetArgs] = None, kwargs: Optional[WidgetKwargs] = None, *, # keyword-only arguments: disabled: bool = False, ctx: Optional[ScriptRunContext] = None, ) -> Any: key = to_key(key) check_callback_rules(self.dg, on_change) check_session_state_rules(default_value=None if index == 0 else index, key=key) opt = ensure_indexable(options) if not isinstance(index, int): raise StreamlitAPIException( "Selectbox Value has invalid type: %s" % type(index).__name__) if len(opt) > 0 and not 0 <= index < len(opt): raise StreamlitAPIException( "Selectbox index must be between 0 and length of options") selectbox_proto = SelectboxProto() selectbox_proto.label = label selectbox_proto.default = index selectbox_proto.options[:] = [ str(format_func(option)) for option in opt ] selectbox_proto.form_id = current_form_id(self.dg) selectbox_proto.disabled = disabled if help is not None: selectbox_proto.help = dedent(help) def deserialize_select_box(ui_value, widget_id=""): idx = ui_value if ui_value is not None else index return opt[idx] if len(opt) > 0 and opt[idx] is not None else None def serialize_select_box(v): if len(opt) == 0: return 0 return index_(opt, v) current_value, set_frontend_value = register_widget( "selectbox", selectbox_proto, user_key=key, on_change_handler=on_change, args=args, kwargs=kwargs, deserializer=deserialize_select_box, serializer=serialize_select_box, ctx=ctx, ) if set_frontend_value: selectbox_proto.value = serialize_select_box(current_value) selectbox_proto.set_value = True self.dg._enqueue("selectbox", selectbox_proto) return cast(str, current_value)
def selectbox(self, label, options, index=0, format_func=str, key=None, help=None): """Display a select widget. Parameters ---------- label : str A short label explaining to the user what this select widget is for. options : list, tuple, numpy.ndarray, pandas.Series, or pandas.DataFrame Labels for the select options. This will be cast to str internally by default. For pandas.DataFrame, the first column is selected. index : int The index of the preselected option on first render. format_func : function Function to modify the display of the labels. It receives the option as an argument and its output will be cast to str. key : str An optional string 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. help : str A tooltip that gets displayed next to the selectbox. Returns ------- any The selected option Example ------- >>> option = st.selectbox( ... 'How would you like to be contacted?', ... ('Email', 'Home phone', 'Mobile phone')) >>> >>> st.write('You selected:', option) """ options = ensure_iterable(options) if not isinstance(index, int): raise StreamlitAPIException( "Selectbox Value has invalid type: %s" % type(index).__name__) if len(options) > 0 and not 0 <= index < len(options): raise StreamlitAPIException( "Selectbox index must be between 0 and length of options") selectbox_proto = SelectboxProto() selectbox_proto.label = label selectbox_proto.default = index selectbox_proto.options[:] = [ str(format_func(option)) for option in options ] selectbox_proto.form_id = current_form_id(self.dg) if help is not None: selectbox_proto.help = help ui_value = register_widget("selectbox", selectbox_proto, user_key=key) current_value = ui_value if ui_value is not None else index return_value = (options[current_value] if len(options) > 0 and options[current_value] is not None else NoValue) return self.dg._enqueue("selectbox", selectbox_proto, return_value)