首页 > 解决方案 > 在 Streamlit 中按下按钮时无法增加值

问题描述

我的问题是当我初始化一个名为 self.items = 0 的新变量时,我希望每次完全导入值时增加 1。但我尝试使用该变量进行调试,但它总是由 0 设置为初始化

这是我的示例代码:

import streamlit as st

class main:
    def __init__(self):
        self.items = 0
        self.run()

    def run(self):
        st.title('Home')
        print(self.items)
        if st.button('Submit'):
            self.items = self.items + 1
        print(self.items)

if __name__ == "__main__":
    main()

标签: pythonstreamlit

解决方案


你是对的,因为每次按下按钮时脚本都会重新运行,变量被重新初始化为 0 并且计数器将不起作用。

但是有一个解决方案:st.session_statestreamlit=0.84.0.
从文档:

对于每个用户会话,会话状态是在重新运行之间共享变量的一种方式。

如下更新代码将起作用:

import streamlit as st


class main:
    def __init__(self):
        # Initialize a session state variable
        if "items" not in st.session_state:
            st.session_state["items"] = 0
        self.items = st.session_state["items"]
        self.run()

    def run(self):
        st.title("Home")
        if st.button("Submit"):
            st.session_state["items"] = st.session_state["items"] + 1
        print(self.items)


if __name__ == "__main__":
    main()

有关此博客文章如何有用的更多信息。


推荐阅读