微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 streamlet 的多选中删除所选项目

如何解决从 streamlet 的多选中删除所选项目

我试图通过 streamlits 多选小部件选择对象来从列表中删除对象,将列表条目作为小部件的条目。因此,列表还决定了多选框中的选项。 但是,在应用重新运行后——一旦我删除了一些选项——我得到了错误streamlit.errors.StreamlitAPIException: 每个多选认值都必须存在于选项中

这是一些最小的代码示例。

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

说明: 流线型多选小部件将最后一个选择保持在其内部状态(在您的情况下为 st.session_state.selected),因此如果您从 st.session_state.options 列表中删除一个项目,它会出错,因为它不能在传递给它的列表中找到当前选择。

要解决此问题,只需在运行其余代码之前删除 session_state.selected;这是通过建议的 if 语句完成的。

您可能还想在 st.form 定义中添加 kwarg clear_on_submit=True,因为这也会清除表单的输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。