I have a keep-retrieve pattern I use when I want to save widget data between pages:
Alternatively, you can also assign a key to every widget you want to keep data for, save all those keys into a list all_my_widget_keys_to_keep
then add at the top of every page:
if all_my_widget_keys_to_keep[0] not in st.session_state: # Check if your widget keys exist already
set_default_values() # Some function that initializes all your values for your widgets
for key in all_my_widget_keys_to_keep:
st.session_state[key] = st.session_state[key]
This hacky little thing interrupts the widget cleanup process which causes widget keys to get deleted when you navigate away from them. You will also see a simpler:
for key in st.session_state:
st.session_state[key] = st.session_state[key]
This bypasses the initialization problem, but beware of having certain widgets with keys that don’t like manual assignment like buttons and file uploaders…