Widget updating for every second input when using session state

您正在使用会话状态来存储应用程序中的页面交互。当用户与应用程序中的小部件交互时(例如,点击按钮),您期望应用程序更新其小部件状态并反映新值。然而,您注意到它并没有这样做。相反,用户必须与小部件交互两次(例如,点击按钮两次)才能使应用程序显示正确的值。您现在该怎么办?🤔 让我们在下面的部分中逐步了解解决方案。

当使用会话状态更新脚本中的小部件或值时,您需要使用分配给小部件的唯一键,而不是您分配给小部件的变量。在下面的示例代码块中,分配给滑块小部件的唯一slider,而小部件分配给的变量slide_val

让我们通过一个例子来看看。假设你希望用户点击一个按钮来重置滑块。

要在按钮点击时更新滑块的值,你需要使用一个回调函数st.buttonon_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")
forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。