I am trying to create a form where the user can select certain options with checkboxes. I want to then use these choices further on in my code.
The problem is that for some reason, nothing within the “if submit_button” loop is being executed. why?
with st.form(key="source_selection"): # Create a form
st.write("Please choose the options you want to use.")
for option in options:
st.checkbox(option, key='checkbox_' + option)
submit_button = st.form_submit_button(label="Submit")
if submit_button: # Check if submit button is clicked
print('SUBMITTED')
selected_options = [option for option in options if st.session_state['checkbox_' + option]]
st.write("Post-submit selected options:")
st.write(selected_options)
if selected_options:
# update session state with selected options
st.session_state.app_state.selected_options = selected_options
st.write(f"Selected Options: {', '.join(selected_options)}")
send_selected_sources_to_backend(selected_options)
else:
st.warning("Please select at least one option.")
It seems like it works fine to me – here’s my attempt to make a complete script
import streamlit as st
options = ["option1", "option2", "option3", "option4", "option5"]
if "app_state" not in st.session_state:
st.session_state.app_state = {}
st.session_state.app_state["selected_options"] = []
def send_selected_sources_to_backend(selected_options):
st.info(f"Sending selected options to backend: {selected_options}")
with st.form(key="source_selection"): # Create a form
st.write("Please choose the options you want to use.")
for option in options:
st.checkbox(option, key="checkbox_" + option)
submit_button = st.form_submit_button(label="Submit")
if submit_button: # Check if submit button is clicked
print("SUBMITTED")
selected_options = [
option for option in options if st.session_state["checkbox_" + option]
]
st.write("Post-submit selected options:")
st.write(selected_options)
if selected_options:
# update session state with selected options
st.session_state.app_state["selected_options"] = selected_options
st.write(f"Selected Options: {', '.join(selected_options)}")
send_selected_sources_to_backend(selected_options)
else:
st.warning("Please select at least one option.")
st.write("selected:")
st.write(st.session_state.app_state["selected_options"])