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

如何解决Streamlit中Python变量实时更新仅显示初始值的问题?

解决Streamlit实时数据更新的问题

你的代码核心问题有两个:

  1. 全局变量未初始化,且主进程的UI仅执行一次渲染,不会跟随线程内的变量变化自动刷新
  2. Streamlit的UI渲染依赖脚本执行流程,单纯通过线程修改全局变量无法触发界面更新

修正后的代码

import streamlit as st
import time

# 用session_state保存会话状态,替代全局变量
if "val" not in st.session_state:
    st.session_state.val = 1
if "multiply" not in st.session_state:
    st.session_state.multiply = 10

# 页面标题
st.title("Streamlit Learning")

# 创建可复用的空容器
placeholder = st.empty()

# 循环更新数据与UI
for x in range(1, 100):
    st.session_state.val = x
    st.session_state.multiply = x * 10
    
    with placeholder.container():
        col1, col2 = st.columns(2)
        col1.metric(label="Current Value", value=st.session_state.val)
        col2.metric(label="Multiply by 10", value=st.session_state.multiply)
    
    time.sleep(1)

关键说明

  • 使用st.session_state替代全局变量,确保变量在Streamlit会话周期内稳定保存状态
  • 将UI更新逻辑放入循环内部,每次循环重新渲染容器内的组件,实现实时刷新效果
  • 无需额外线程,对于简单的定时更新场景,直接用循环+time.sleep()的方案更简洁高效

如果需要处理后台耗时任务再同步更新UI,可以结合线程+st.rerun()触发刷新,但针对当前的计数需求,上述方案足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:42