I am building an app to run on Streamlit in Snowflake. And I’ve ran into issues with the app completely refreshing when a value is entered into a number input widget element.
The app refreshes when input is entered to the second number input field in the tab “An owl” tab.
This is my code snippet
import streamlit as st
# set up session state vars
if "searchOrder" not in st.session_state:
st.session_state["searchOrder"] = False
if "searchUser" not in st.session_state:
st.session_state["searchUser"] = False
st.write(f"""Order init: """, st.session_state["searchOrder"])
# function to flip states of buttons clicked
def handleButton(attribute, state):
st.session_state[attribute] = state
# accept order ID to search from user
orderSearchParam = st.number_input("Order ID", value=None, step=1, format="%i", placeholder="Enter order ID")
# Update button state with the call-back function
orderSearchBtn = st.button("Search", key="orderSearchBtn", on_click=handleButton, args=("searchOrder", True))
# if search input accepted, materialise tabs and other elements down below
if st.session_state["searchOrder"]:
st.write(f"""Order: """, st.session_state["searchOrder"])
tab1, tab2 = st.tabs(["Dog", "Owl"])
with tab1:
st.header("A dog")
st.image("https://static.streamlit.io/examples/dog.jpg", width=200)
with tab2:
st.header("An owl")
st.image("https://static.streamlit.io/examples/owl.jpg", width=200)
orderSearchParam = int(orderSearchParam)
st.write("Search submitted for Order ID: ", orderSearchParam)
st.write(f"""User init: """, st.session_state["searchUser"])
# Add a number input widget with a search button below
userSearchParam = st.number_input("User ID", value=None, step=1, format="%i", placeholder="Enter User ID")
#flip the button state with the call-back function
userSearchBtn = st.button("Search", key="userSearchBtn", on_click=handleButton, args=("searchUser", True))
# if search parameter entered by user do the following
if st.session_state["searchUser"]:
st.write(f"""User: """, st.session_state["searchUser"])
userSearchParam = int(userSearchParam)
st.write("Search submitted for User ID: ", userSearchParam)
keys = list(st.session_state.keys())
for key in keys:
st.session_state.pop(key)