I am developing a streamlit application. In one point we are calling a callback function that needs to render an input field to get the user response and return True or False based on users input. The problem is that we need to wait the user input to continue with callback function execution but with the next code the run loop gets stuck on the while statement.
I understand that the widget is not working because streamlit needs to re-render all time the widgets to get the state/value and so on, but we don’t see how to do it then because the function must not continue till we evaluate the user input (remember we are inside a function).
We tried the the built in python function input and works because properly blocks the execution.
## Define the human validator def _approve(_input: str) -> bool: msg = ( "Do you want to continue? Make sure the information below is correct." ) msg += "\n\n" + _input + "\n" # input the answer in the shown space in the terminal # expr = st.chat_input(msg) # insert an input at the confirmation placeholder expr = st.text_input(msg, value="", key="confirmation") while expr == "": print("Please, provide an input") pass print("Input provided by the user:", expr) # classify if the answer provided in the terminal is positive or not resp = is_positive_answer(expr) resp = resp.strip() print("Interpretation of the natural language:", resp) # user-friendly information displayed in the terminal if resp.lower() in ('yes'): print('\n Continuing.... \n') if resp.lower() not in ('yes'): print('\n Breaking.... \n') # if the answer is positive, the thread continues # if the answer is negative, the thread breaks return resp.lower() in ('yes')