Streamlit 1.30.0版本Generate Data按钮无法激活问题求助
Streamlit 1.30.0中「Generate Data」按钮无法激活的修复方案
问题概述
基于Streamlit开发的合成数据生成应用,升级至1.30.0版本后「Generate Data」按钮始终无法激活(1.29.0版本运行正常)。应用核心流程:
- 收集用户输入的字段名与字段类型
- 收集领域信息与描述内容
- 所有必填项填写完成后激活生成按钮,触发CSV格式合成数据的生成与下载
问题原因
Streamlit 1.30.0对表单组件的状态同步逻辑做了优化:表单内的组件返回值在提交前不会自动同步到session_state。原代码中先将组件值存入session_state再判断空值的逻辑,会导致all_fields_filled基于旧的session_state值计算,无法正确反映当前用户输入状态,最终按钮始终处于禁用状态。
修复代码
调整后的字段添加模块代码
col_manual_data_spec, col_csv_upload = st.columns([3, 2]) with col_manual_data_spec: st.markdown("<div class='box'>", unsafe_allow_html=True) st.subheader('Manual Data Specification') if st.button('Add Field'): add_field() with st.form(key='manual_data_form'): all_fields_filled = True # 临时存储当前输入的字段值,后续统一更新session_state temp_field_names = [] temp_field_types = [] for i in range(len(st.session_state['field_names'])): col1, col2 = st.columns([3, 2]) with col1: field_name = st.text_input( f'Field Name {i+1}', value=st.session_state['field_names'][i], key=f'field_name_{i}' ) temp_field_names.append(field_name) # 直接用当前输入值判断是否为空 if not field_name: all_fields_filled = False with col2: field_type = st.selectbox( f'Field Type {i+1}', options, index=options.index(st.session_state['field_types'][i]) if st.session_state['field_types'][i] in options else 0, key=f'field_type_{i}' ) temp_field_types.append(field_type) # 直接用当前选择值判断是否为空 if not field_type: all_fields_filled = False # 循环结束后统一更新session_state,避免状态不同步 st.session_state['field_names'] = temp_field_names st.session_state['field_types'] = temp_field_types domain = st.selectbox('Domain Info (Mandatory)', [''] + domains, key='domain_info') description = st.text_area('Description (Mandatory)', key='description_info') # 直接用组件返回值判断必填项是否为空 if not domain or not description: all_fields_filled = False submit_button = st.form_submit_button('Generate Data', disabled=not all_fields_filled)
关键修改点
- 空值判断逻辑调整:不再依赖
session_state存储的值,直接使用组件当前的返回值判断是否为空,确保all_fields_filled能实时反映用户输入状态。 - session_state更新时机优化:先用临时列表存储所有字段的当前输入值,循环结束后统一更新
session_state,避免循环内更新导致的状态不同步问题。
验证说明
修改后,当用户填写完所有必填字段(字段名、字段类型、领域、描述)时,「Generate Data」按钮会自动激活;若有任意必填项为空,按钮保持禁用状态,符合预期逻辑。
内容的提问来源于stack exchange,提问作者Mani Sunder
相关产品推荐
相关产品推荐

