Make a widget remember its value after it is hidden and shown again in later script runs

Hi @Wally - Here’s a working version of your app. It doesn’t actually need an init() method as the number widget value is initialized from a session variable anyway when the program first starts. Then I use a callback to memoize the number session variable from the number widget value. This would also work in a multi-page app.

import streamlit as st

session = st.session_state
if 'N' not in session:
    session.N = 3

def main() -> None:

    def _set_number_cb():
        session.N = session.n

    hide = st.checkbox('hide?', value=False)
    if not hide:
        st.number_input(label='Number', min_value=1, max_value=5, step=1, value=session.N, key='n', on_change=_set_number_cb)
        st.write(session.N)

    st.button("click to trigger re-run")
    st.json(session)

if __name__ == "__main__":
    main()
1 Like