python - 在 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()
解决方案
你是对的,因为每次按下按钮时脚本都会重新运行,变量被重新初始化为 0 并且计数器将不起作用。
但是有一个解决方案:st.session_state
在streamlit=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()
有关此博客文章如何有用的更多信息。
推荐阅读
- xml - XML - 将 xi:include 替换为引用文件中的实际内容
- javascript - 回调函数在 JavaScript 示例中不起作用
- sql - 在sql中将字符串添加到以逗号分隔的现有行
- macos - 如何将 SwiftUI 视图导出为 PDF(矢量)
- multithreading - LP 的线程数和机器规格(CPU 和 RAM)之间的平衡
- java - 当 Android 的数据保护程序关闭时获取“BLOCKED”网络状态
- python - 如何使用 androgurad(或任何其他 python 工具)从 dex 文件中反编译字节序列?
- flutter - 无法使用 workmanager 在后台执行异步方法
- python - 在值之前显示悬停标签
- javascript - 如何将上传的图像保存到烧瓶中的文件夹