如何获取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
相关产品推荐
相关产品推荐

