Set selectbox value

Hello there! Is there a way I can set the value of a selectbox on the press of a button?
Thamkss :slight_smile:

cols = st.columns([1, 2])
search = cols[0].selectbox('', options, key='search_1')
if cols[1].button('set'):
     # ? set selectbox value to (say) options[0]

Hey @elwyn,

With the session state release, this should be possible. Something along the lines of (untested code):

cols = st.columns([1, 2])
# when you create the selectbox with a key it automatically tracks it in the session state
search = cols[0].selectbox('', options, key='search_1')

if cols[1].button('set'):
     # call search_1 in session state and set it
     st.session_state.search_1 = options[0]

Here is a link to our blog for more info: Store Information Across App Interactions | Session State

Happy Streamlit-ing!
Marisa

1 Like

Thamks @Marisa_Smith for the reply.
The code seems nice, but i get this error ‘StreamlitAPIException: st.session_state.search_1 cannot be modified after the widget with key search_1 is instantiated.’

Hey @elwyn,

Oops! Sorry! I was coding from my phone and I mixed up the order of those :flushed:

It should look like this:

cols = st.columns([1, 2])

if cols[1].button('set'):
     # call search_1 in session state and set it
     st.session_state.search_1 = options[2]

# when you create the selectbox with a key it automatically tracks it in the session state
search = cols[0].selectbox('', options, key='search_1')

You shouldn’t need to initialize search_1 unless you intend to access it or change its state before its first render!

Happy Streamlit-ing!
Marisa