如何在Streamlit中按下回车键后清空输入字段?
解决Streamlit文本框回车后保存输入并清空的问题
你的核心问题是回调触发时直接清空了绑定输入框的session_state键,导致无法捕获输入内容。正确思路是先保存输入内容,再清空输入框,以下是具体实现方案:
方案1:保存所有历史输入
适合需要记录用户多次输入的场景:
import streamlit as st # 初始化存储历史输入的session_state变量 if "saved_inputs" not in st.session_state: st.session_state.saved_inputs = [] def save_and_clear_text(): # 先保存当前输入内容(可选过滤空输入) if st.session_state.my_text.strip(): st.session_state.saved_inputs.append(st.session_state.my_text) # 再清空输入框绑定的session_state键 st.session_state.my_text = "" # 绑定key的输入框,回车触发回调 my_text = st.text_input("Enter text here", key='my_text', on_change=save_and_clear_text) # 展示已保存的输入内容 st.subheader("已保存的输入:") for idx, content in enumerate(st.session_state.saved_inputs, 1): st.write(f"{idx}. {content}")
方案2:仅保存最新输入
适合只需要获取用户单次输入并处理的场景:
import streamlit as st # 初始化存储最新输入的session_state变量 if "last_input" not in st.session_state: st.session_state.last_input = "" def save_and_clear_text(): # 保存当前输入 st.session_state.last_input = st.session_state.my_text # 清空输入框 st.session_state.my_text = "" my_text = st.text_input("Enter text here", key='my_text', on_change=save_and_clear_text) # 展示最新保存的内容 st.write("最新输入:", st.session_state.last_input)
关键说明
- 输入框必须指定
key,才能通过st.session_state[key]访问其内容 - 回调函数中先读取输入内容再清空,避免数据丢失
- 利用
st.session_state持久化存储内容,不会因页面重绘丢失
内容的提问来源于stack exchange,提问作者cottontail
相关产品推荐
相关产品推荐

