Search code examples
pythonhtmlstreamlit

Reseting values in st.number_input


Currently, I'm trying to program a website using Streamlit,Python. In it, I'm using st.number_input to then calculate a value with a button. Since it's too cumbersome to change each value back to 0.0 (the default value), I now want to add a button that resets all values to 0.0 and also displays them as such on the website. While I can change the values, the website still displays the previous value I entered. Therefore, I want to ask if it's possible to change the values and have them reflected on the website as well.

Here is the code-snippit im using right now:

    st.subheader('Pigments')
    pigm_bayfer_yellow_420 = st.number_input('Bayferrox gelb 420:', min_value=0.0, max_value=1.0,
                                             step=0.00001, format='%.7f', value=0.0)
    pigm_bayfer_red_110 = st.number_input('Bayferrox rot 110:', min_value=0.0, max_value=1.0,
                                          step=0.00001, format='%.7f', value=0.0)
    pigm_hgn_green = st.number_input('HGN grün:', min_value=0.0, max_value=1.0,
                                            step=0.00001, format='%.7f', value=0.0)
    pigm_pk_3095 = st.number_input('PK 3095:', min_value=0.0, max_value=1.0,
                                   step=0.00001, format='%.7f', value=0.0)
    pigm_rkb06 = st.number_input('RKB06:', min_value=0.0, max_value=1.0,
                                 step=0.00001, format='%.7f', value=0.0)
    pigm_u54 = st.number_input('U54:', min_value=0.0, max_value=1.0,
                               step=0.00001, format='%.7f', value=0.0)

    if col1.button('Calculate'):
      #here i calculate the value
    if col2.button('Reset'):
      pigm_bayfer_yellow_420 = 0.0
      pigm_bayfer_red_110 = 0.0
      pigm_hgn_green = 0.0
      pigm_pk_3095 = 0.0
      pigm_rkb06 = 0.0
      pigm_u54 = 0.0

As previously mentioned, I want to use the reset button to set all st.number_input values to 0.0 and have it displayed as such on the HTML/website. Unfortunately, they are not being set to 0.0 but instead remain at, for example, 0.888.


Solution

  • The most straightforward way to do this would be to set it up as a form and use the "clear_on_submit" option.

    import streamlit as st
    
    st.subheader('Pigments')
    
    with st.form("my_form",clear_on_submit=True):
       st.write("Inside the form")
       pigm_bayfer_yellow_420 = st.number_input('Bayferrox gelb 420:', min_value=0.0, max_value=1.0,
                                                step=0.00001, format='%.7f', value=0.0)
       pigm_bayfer_red_110 = st.number_input('Bayferrox rot 110:', min_value=0.0, max_value=1.0,
                                                step=0.00001, format='%.7f', value=0.0)
       pigm_hgn_green = st.number_input('HGN grün:', min_value=0.0, max_value=1.0,
                                                step=0.00001, format='%.7f', value=0.0)
       pigm_pk_3095 = st.number_input('PK 3095:', min_value=0.0, max_value=1.0,
                                        step=0.00001, format='%.7f', value=0.0)
       pigm_rkb06 = st.number_input('RKB06:', min_value=0.0, max_value=1.0,
                                        step=0.00001, format='%.7f', value=0.0)
       pigm_u54 = st.number_input('U54:', min_value=0.0, max_value=1.0,
                                    step=0.00001, format='%.7f', value=0.0)
       # Every form must have a submit button.
       submitted = st.form_submit_button("Revert to 0")