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

Streamlit点击Submit按钮时self.items变量无法正常自增问题求助

问题原因

Streamlit的核心运行逻辑是每次用户触发交互事件(点击按钮、修改输入组件等)时,整个Python脚本都会从头到尾重新执行一次。你当前的代码每次脚本重跑都会重新实例化main类,__init__方法每次执行都会把self.items重置为初始值0,因此无法实现数值累加。

修复方案

使用Streamlit内置的st.session_state存储需要跨脚本重跑保留的状态变量即可解决,以下是符合你原有类封装逻辑的修复代码:

import streamlit as st

class Main:
    def __init__(self):
        self.items = 0

    def run(self):
        st.title('Home')
        st.write(f'当前items数值:{self.items}')
        if st.button('Submit'):
            self.items = self.items + 1

if __name__ == "__main__":
    # 仅首次运行时实例化类,后续重跑直接读取会话中存储的实例,避免重复初始化
    if 'main_instance' not in st.session_state:
        st.session_state.main_instance = Main()
    st.session_state.main_instance.run()

如果不需要类封装,也可以直接操作st.session_state实现同样效果,代码更简洁:

import streamlit as st

st.title('Home')
# 首次运行初始化状态变量
if 'items' not in st.session_state:
    st.session_state.items = 0

st.write(f'当前items数值:{st.session_state.items}')
if st.button('Submit'):
    st.session_state.items += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:27:05