从 streamlet 的多选中删除选定的项目
Removing the selected items from streamlet's multiselect
我正在尝试通过 streamlits 多选小部件选择对象来从列表中删除对象,并将列表条目作为小部件的条目。因此,该列表还决定了多选框中的选项。
然而,在应用程序重新运行后——一旦我删除了一些选项——我得到了错误:streamlit.errors.StreamlitAPIException: Every Multiselect default value must exist in options
这是一些最小的代码示例。
import streamline as st
if st.button("Refill") or "options" not in st.session_state:
st.session_state.options=["a","b","c"]
def submit():
for item in st.session_state.selected:
st.session_state.options.remove(item)
form=st.form("My form")
form.multiselect("Select", st.session_state.options, key="selected")
form.form_submit_button("Submit", on_click=submit)
我尝试添加行
st.session_state.selected=[]
到提交功能,以便清除多选框并且不引用已删除的项目,但它没有解决问题。
提前感谢您的帮助! :)
将以下内容添加到代码的顶部:
if "selected" in st.session_state:
del st.session_state.selected
说明:
streamlit multi-select 小部件将最后一个 selection 保持在其内部状态(在您的情况下为 st.session_state.selected),因此如果您从 st.session_state.options
列表中删除一个项目,它会出错,因为它无法在您传递给它的列表中找到当前的 selection。
要解决此问题,只需删除 运行 其余代码之前的 session_state.selected
;这是通过建议的 if 语句完成的。
您可能还想在 st.form 定义中添加 kwarg clear_on_submit=True
,因为这也会清除表单的输入。
我正在尝试通过 streamlits 多选小部件选择对象来从列表中删除对象,并将列表条目作为小部件的条目。因此,该列表还决定了多选框中的选项。 然而,在应用程序重新运行后——一旦我删除了一些选项——我得到了错误:streamlit.errors.StreamlitAPIException: Every Multiselect default value must exist in options
这是一些最小的代码示例。
import streamline as st
if st.button("Refill") or "options" not in st.session_state:
st.session_state.options=["a","b","c"]
def submit():
for item in st.session_state.selected:
st.session_state.options.remove(item)
form=st.form("My form")
form.multiselect("Select", st.session_state.options, key="selected")
form.form_submit_button("Submit", on_click=submit)
我尝试添加行
st.session_state.selected=[]
到提交功能,以便清除多选框并且不引用已删除的项目,但它没有解决问题。
提前感谢您的帮助! :)
将以下内容添加到代码的顶部:
if "selected" in st.session_state:
del st.session_state.selected
说明:
streamlit multi-select 小部件将最后一个 selection 保持在其内部状态(在您的情况下为 st.session_state.selected),因此如果您从 st.session_state.options
列表中删除一个项目,它会出错,因为它无法在您传递给它的列表中找到当前的 selection。
要解决此问题,只需删除 运行 其余代码之前的 session_state.selected
;这是通过建议的 if 语句完成的。
您可能还想在 st.form 定义中添加 kwarg clear_on_submit=True
,因为这也会清除表单的输入。