Hi, I’m experimenting with layout and flow to have interesting interactions in my app, and I came through this strange behaviour that I was able to reproduce in the code below.
First a bit of context : My app loads a file, and runs through various steps. I want to hide the latter steps until first steps are done. The flow is controlled with booleans set to False at the beginning and the layout is set with a bunch of st.empty().
A simple flow is as follow : load data > validate data > display button to run further analysis > display button to save analysis results
The issue I have is that the second button resets the app, and the state of the first button.
I was able to reproduce the behaviour with this code :
import streamlit as st def main(): IS_VALID = st.checkbox('valid') btn_1 = False btn_2 = False st.write(IS_VALID, btn_1, btn_2) btn_ctn_1 = st.empty() if IS_VALID: btn_1 = btn_ctn_1.button('button 1') st.write(IS_VALID, btn_1, btn_2) btn_ctn_2 = st.empty() if btn_1: btn_2 = st.button('button 2') st.write(IS_VALID, btn_1, btn_2) main()
I’d like to understand how to correct or circumvent that issue, thanks