RiffBlog

How to clear input field after hitting Enter in streamlit?

I have a streamlit app where I want to get user input and use it later. However, I also want to clear the input field as soon as the user hits Enter. I looked online and it seems I need to pass a callback function to text_input but I can't make it work. I tried a couple different versions but neither works as I expect.

import streamlit as st def clear_text(): st.session_state.my_text = "" # This version doesn't clear the text after hitting Enter. my_text = st.text_input("Enter text here", on_change=clear_text) # This version clears the field but doesn't save the input. my_text = st.text_input("Enter text here", on_change=clear_text, key='my_text') st.write(my_text) 

The expectation is to save the input into my_text and clear the field afterwards.

I looked at similar questions about clearing text input here and here but they're not relevant for my case because I want the input field to clear automatically while those cases talk about using a separate button. How do I make it work?

1 Answer

You can slightly adjust the solution provided by @MathCatsAnd :

if "my_text" not in st.session_state: st.session_state.my_text = "" def submit(): st.session_state.my_text = st.session_state.widget st.session_state.widget = "" st.text_input("Enter text here", key="widget", on_change=submit) my_text = st.session_state.my_text st.write(my_text) 

Output :

enter image description here

1

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobnBoaWh%2Fd4KOoaawZaSkeqS4xJqpZqGepcK1ecWinKWcXZaztbHRZp%2BirKSeu6h5xKernqpdnrtuv9OrnJqlnJ7B

Zora Stowers

Update: 2024-05-21