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
相关产品推荐
相关产品推荐

