Hi everyone! I’m new to Streamlit, and I have some difficulties with st.number_input combined with st.empty(). I’ve pasted part of my code to better visualize the problem:
with R0C1: st.title(str(Day0)) with R0C2: empR0C2 = st.empty() R0C2NI = empR0C2.number_input(label="", value=Day0Value, disabled=st.session_state.disable_b0, key="01") with R0C3: if st.button(label="Edit", key="01"): st.session_state.disable_b0 = False R0C2NI = empR0C2.number_input(label="", value=Day0Value,disabled=st.session_state.disable_b0, key="02") with R0C4: if st.button(label="Save", key="02"): st.session_state.disable_b0 = True WriteCoalUsageLimited = R0C2NI WriteTimeLimited = pd.Timestamp(Day0 - dt.timedelta(1)).isoformat() SendToDBlimited(WriteCoalUsageLimited, WriteTimeLimited) Df = client.query_api().query_data_frame() Df['DATE'] = Df['_time'].dt.date Df['VALUE'] = Df['_value'] Df = pd.DataFrame(Df, columns=['DATE', 'VALUE']) Df = Df.iloc[:-1, :] Day0 = (datetime.today()).date() Day0Value = int(Df.loc[Df['DATE'] == Day0, 'VALUE'].iloc) R0C2NI = empR0C2.number_input(label="", value=Day0Value, disabled=st.session_state.disable_b0, key="03")
This code works great but it has one problem, viz when I enter the value I want to save for the first time and I press enter, the value in st.number_inpute changes to its previous value (before clicking the Edit button), but when I edit the value in st.number_input for the second and I press enter the value is correct and only then I can click Save button.
I understand that this behavior is somehow connected with Streamlit refresh and build order, and I’ve tried to solve this with st.session_state and function connected to on_change, but I’ve failed, and I don’t have any further thoughts on how to solve this problem. In advance I would like to thank everyone for creating the Streamlit framework, it’s great and intuitive for creating data analysis visualization dashboards, and apps.
Have a great day,