I am trying to disable st.number_input
for 1-2 seconds using time.sleep(1)
and then enable it again. However, when I use on_change
, time.sleep()
does not seem to work—the input is not disabled for 1 second. Instead, it is immediately enabled again.
My question: Why does time.sleep(1)
not delay the UI update for 1 second?
Can anyone help me explain why time.sleep()
does not work as expected in Streamlit with on_change?
Here is my code:
import streamlit as st
import time
if "num" not in st.session_state:
st.session_state.num = 0
if "disable_input" not in st.session_state:
st.session_state.disable_input = False
@st.fragment
def number_input_fragment():
def on_click():
st.session_state.disable_input = True
time.sleep(1) # Delay for 1 second
st.session_state.disable_input = False
num = st.number_input(
"Select a number",
step=1,
key="num",
disabled=st.session_state.disable_input,
on_change=on_click # Triggers when value changes
)
st.write(num)
st.write("### Number Input Fragment Demo")
number_input_fragment()