python - 如何在运行时将元素添加到 Streamlit 网站?
问题描述
我想要一个按钮,在单击时创建一个额外的输入框。它需要能够在每个输入框上放置标签,根据需要添加任意数量的框,并在整个页面加载期间保留它们。似乎 Streamlit 主循环每次运行时都会从头开始运行所有代码,这意味着在运行时重新定义的值会在大约一秒钟后恢复为默认值。这意味着用户生成的输入框一生成就会消失。
对我来说最明显的解决方案是创建一个 .txt 或 .json 文件来存储数据。但是,我不确定这是执行此操作的规范方法,因为它需要在每个循环中访问文件,并且感觉更像是一种解决方法,而不是预期的解决方案。有谁知道这是否有已知的 Streamlit 解决方案?
def add_entry(holder, data_type, label=""):
"""
Creates a user-specified entry
Inputs:
-holder: dict: {label, value}
-data_type: string, whether to accept numbers, text, or true/false
-label: string, text to be displayed in entry
"""
if data_type == "Number":
val = st.number_input(label)
elif data_type == "Text":
val = st.text_input(label)
elif data_type == "True/False":
val = st.checkbox(label)
else:
val = None
holder.update({label: val})
user_added_params = {}
user_added_col_1, user_added_col_2, user_added_col_3 = st.beta_columns(3)
with user_added_col_2:
options = ["Number", "Text", "True/False"]
user_added_type = st.selectbox("Type", options=options)
with user_added_col_3:
user_added_label = st.text_input("Parameter Label")
with user_added_col_1:
if st.button("Add Parameter"):
new_entry = True
for label, value in zip(user_added_params.keys(), user_added_params.values()):
add_entry(holder=user_added_params, label=label, data_type=user_added_type)
if new_entry:
add_entry(holder=user_added_params, label=user_added_label, data_type=user_added_type)
解决方案
推荐阅读
- json - 使用groovy从json中删除前导方括号
- performance - 两次引用相同度量时 DAX 性能低下
- python - Heroku在部署python Flask Web应用程序时获取=错误代码= H10
- flutter - Flutter:我想将每个 for 循环中的 String 值分配给 Flutter 中的字符串列表,但出现无效范围的错误
- r - { :需要 TRUE/FALSE 的缺失值
- android - 从 Activity 加载 Fragment 时出现空白屏幕
- python - 为什么我的向量化 Numpy 代码比非向量化代码花费更长的时间
- java - MotionLayout 的场景变化
- node.js - imagemin - 代码执行但似乎没有任何反应
- python - 当我尝试为 Post 对象创建新评论时,页面未找到 404?