You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Streamlit中无关联变量的动态生成文本输入框值?

问题:如何获取循环生成的Streamlit文本输入框的值?

我在代码里通过循环为数据表的每个字段创建文本输入框,并且给每个输入框分配了key,但没有关联变量名,请问怎么获取用户输入的值?我猜测用session state的思路是对的吗?

附代码:

def cols(db,s_box):

    fields =[]
    exclude = ['notes']

    cursor = db.get_collection(s_box).find({})

    for item in cursor:
        for i in item:
            if i not in exclude:
                fields.append(i)
                st.sidebar.text_input("Please enter a search value for {}".format(i),key=i)

解答

你的思路完全正确,Streamlit中只要给组件指定了唯一的key,就可以通过st.session_state[key]直接获取对应组件的输入值,不需要提前绑定变量名。

具体操作方法:

  • 你已经给每个text_input指定了字段名作为key,只要确保这些key不重复(建议对fields做去重处理,比如用fields = list(set(fields)),避免重复字段导致组件冲突),就可以直接通过字段名取值。
  • 在需要使用输入值的地方,遍历收集到的fields列表,逐个从session_state中取出对应的值:

示例代码:

# 假设已经调用cols函数生成了输入框
search_params = {}
for field in fields:
    # 用get方法避免key不存在时抛出异常,默认返回空字符串
    search_params[field] = st.session_state.get(field, "")

# 此时search_params就是字段名与输入值对应的字典,可直接用于后续查询逻辑

内容的提问来源于stack exchange,提问作者Rwt987265

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:08:24