首页 > 解决方案 > 如何在运行时将元素添加到 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)

标签: pythonfrontendstreamlit

解决方案


推荐阅读