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

如何在Streamlit中动态更新Selectbox的选项值?

在Streamlit中动态更新Selectbox选项的正确方法

你的代码无法正常运行的核心问题在于:

  • 直接使用while循环+time.sleep会阻塞Streamlit的运行流程,导致页面无法渲染和触发刷新
  • 每次脚本重跑时都会重新初始化st.session_state['choice'],覆盖掉更新后的值

针对你每小时更新一次选项的实际需求,推荐使用定时自动刷新的方式实现,以下是修正后的代码:

import streamlit as st

def main():
    # 初始化session_state,仅在首次运行时设置初始选项
    if 'choice' not in st.session_state:
        st.session_state['choice'] = list(range(2))
    
    # 设置自动刷新间隔,这里设为3600秒(1小时),测试时可改为5秒
    st.autorefresh(interval=3600 * 1000, key="auto_refresh")
    
    # 模拟获取新数据的逻辑,替换成你实际的数据源获取代码即可
    # 每次页面刷新时,更新选项列表
    st.session_state['choice'] = list(range(5))
    
    # 渲染Selectbox,自动读取session_state中的最新选项
    selected_option = st.selectbox("选择选项", options=st.session_state['choice'])
    st.write(f"当前选中:{selected_option}")

if __name__ == "__main__":
    main()

关键说明:

  1. Session State初始化:通过if 'choice' not in st.session_state判断,避免每次页面重跑都重置选项值
  2. 自动刷新机制:st.autorefresh会定时触发页面重跑,重跑时执行新数据获取逻辑,更新选项列表
  3. 动态渲染:Selectbox会自动读取st.session_state['choice']的最新值,实现选项动态更新

如果你需要手动触发更新(而非定时),可以用按钮+重跑的方式:

import streamlit as st

def main():
    if 'choice' not in st.session_state:
        st.session_state['choice'] = list(range(2))
    
    # 点击按钮手动更新选项
    if st.button("更新选项"):
        st.session_state['choice'] = list(range(5))
        st.experimental_rerun()  # 触发页面重跑,立即显示新选项
    
    st.selectbox("选择选项", options=st.session_state['choice'])

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:45:33