Widget updating for every second input when using session state
Overview
您正在使用会话状态来存储应用程序中的页面交互。当用户与应用程序中的小部件交互时(例如,点击按钮),您期望应用程序更新其小部件状态并反映新值。然而,您注意到它并没有这样做。相反,用户必须与小部件交互两次(例如,点击按钮两次)才能使应用程序显示正确的值。您现在该怎么办?🤔 让我们在下面的部分中逐步了解解决方案。
Solution
当使用会话状态更新脚本中的小部件或值时,您需要使用分配给小部件的唯一键,而不是您分配给小部件的变量。在下面的示例代码块中,分配给滑块小部件的唯一键是slider
,而小部件分配给的变量是slide_val
。
让我们通过一个例子来看看。假设你希望用户点击一个按钮来重置滑块。
要在按钮点击时更新滑块的值,你需要使用一个回调函数与st.button
的on_click
参数:
# the callback function for the button will add 1 to the
# slider value up to 10
def plus_one():
if st.session_state["slider"] < 10:
st.session_state.slider += 1
else:
pass
return
# when creating the button, assign the name of your callback
# function to the on_click parameter
add_one = st.button("Add one to the slider", on_click=plus_one, key="add_one")
# create the slider
slide_val = st.slider("Pick a number", 0, 10, key="slider")
Relevant resources
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。