如何重置Streamlit中st.number_input的值并同步显示?
Streamlit数值输入框重置问题解决方法
你遇到的问题核心是:直接修改变量值不会同步到Streamlit的输入组件显示,因为组件的状态是由Streamlit的Session State管理的,不是普通变量。要实现重置后页面同步显示0.0,得用Session State来绑定每个输入框的状态。
解决步骤
- 给每个
st.number_input添加key参数,让组件和Session State的对应键绑定 - 初始化Session State(首次运行时设置所有输入框默认值为0.0)
- 重置按钮直接修改Session State里对应键的值
- 将
st.number_input的value参数关联到Session State的键,让组件根据Session State的值更新显示
修改后的完整代码
st.subheader('Pigments') # 初始化Session State,首次运行时设置所有输入框默认值为0.0 pigment_keys = [ 'bayfer_yellow_420', 'bayfer_red_110', 'hgn_green', 'pk_3095', 'rkb06', 'u54' ] for key in pigment_keys: if key not in st.session_state: st.session_state[key] = 0.0 # 绑定Session State的数值输入框 pigm_bayfer_yellow_420 = st.number_input( 'Bayferrox gelb 420:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['bayfer_yellow_420'], key='bayfer_yellow_420' ) pigm_bayfer_red_110 = st.number_input( 'Bayferrox rot 110:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['bayfer_red_110'], key='bayfer_red_110' ) pigm_hgn_green = st.number_input( 'HGN grün:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['hgn_green'], key='hgn_green' ) pigm_pk_3095 = st.number_input( 'PK 3095:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['pk_3095'], key='pk_3095' ) pigm_rkb06 = st.number_input( 'RKB06:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['rkb06'], key='rkb06' ) pigm_u54 = st.number_input( 'U54:', min_value=0.0, max_value=1.0, step=0.00001, format='%.7f', value=st.session_state['u54'], key='u54' ) if col1.button('Calculate'): # 计算逻辑可以直接使用上面的变量,或者从session_state取值 pass if col2.button('Reset'): # 重置所有Session State的值为0.0,输入框会自动同步显示 for key in pigment_keys: st.session_state[key] = 0.0
说明
- 每个输入框的
key必须唯一,这里用了简洁的键名,和输入框一一对应 - 初始化Session State的循环避免了重复写默认值的代码,更简洁
- 点击重置按钮时,直接修改Session State的对应值,Streamlit会自动重新渲染组件,显示更新后的0.0值
内容的提问来源于stack exchange,提问作者Torsten Buchert
相关产品推荐
相关产品推荐

