You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit表单中基于下拉框联动更新选项的问题求助

解决Streamlit中国家与州/省份下拉框联动问题

直接上可运行的代码,核心是利用st.session_state存储选择状态,配合on_change回调实现实时联动:

import streamlit as st

# 预定义国家-州/省份映射数据
country_state_map = {
    "中国": ["北京", "上海", "广东", "浙江"],
    "美国": ["加利福尼亚州", "纽约州", "得克萨斯州"],
    "加拿大": ["安大略省", "不列颠哥伦比亚省", "魁北克省"]
}

# 初始化session_state中的变量
if "selected_country" not in st.session_state:
    st.session_state.selected_country = None
if "selected_state" not in st.session_state:
    st.session_state.selected_state = None

# 国家选择变化后的回调函数:重置州的选择
def reset_state():
    st.session_state.selected_state = None

# 国家下拉框:用key绑定session_state,自动同步选择值
st.selectbox(
    "选择国家",
    options=list(country_state_map.keys()),
    key="selected_country",
    on_change=reset_state
)

# 根据选中的国家动态生成州/省份选项
if st.session_state.selected_country:
    available_states = country_state_map[st.session_state.selected_country]
    st.selectbox(
        "选择州/省份",
        options=available_states,
        key="selected_state"
    )

# 提交按钮(用于最终表单提交)
if st.button("提交表单"):
    if st.session_state.selected_country and st.session_state.selected_state:
        st.success(f"已选择:{st.session_state.selected_country} - {st.session_state.selected_state}")
    else:
        st.warning("请完成所有选择")

关键要点说明

  • 用key绑定session_state:给下拉框指定唯一key后,Streamlit会自动将选择值同步到st.session_state[key],无需手动在回调里赋值,这是解决状态不更新的核心。
  • 回调重置州选择:国家切换时清空州的选择,避免出现旧国家的州选项残留。
  • 动态渲染州下拉框:通过判断st.session_state.selected_country的存在,实时生成对应州的选项,确保每次页面rerun时都能拿到最新选择。

常见问题排查

  • 若之前用普通变量存储选择:Streamlit每次交互都会rerun整个脚本,普通变量会被重新初始化,必须用st.session_state保留跨rerun的状态。
  • 回调未生效:检查下拉框的key是否唯一、回调函数是否正确修改st.session_state变量,避免语法错误。

内容的提问来源于stack exchange,提问作者Sheyda Zarandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:13