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