You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Streamlit multiselect组件删除选中项并解决默认值报错问题

报错根因
  • Streamlit页面重渲染逻辑优先级高于表单回调函数:点击提交按钮后,页面会先重新渲染所有组件,此时st.session_state.selected还存储着之前选中的待删除选项,而st.session_state.options已经更新为删除后的列表,导致multiselect的默认值不在可选选项范围内,触发异常。
  • 你在submit回调中清空st.session_state.selected的操作执行时机晚于组件渲染,因此无法生效。
修复方案

你可以在渲染multiselect组件前,先过滤掉选中值里不存在于当前可选列表的无效值,作为组件的默认参数,同时修正原代码的导入拼写错误,修复后代码如下:

import streamlit 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:
        if item in st.session_state.options:
            st.session_state.options.remove(item)
    st.session_state.selected = []

form = st.form("My form")
# 提前过滤有效选中值作为默认参数
valid_selected = [item for item in st.session_state.get("selected", []) if item in st.session_state.options]
form.multiselect("Select", st.session_state.options, default=valid_selected, key="selected")
form.form_submit_button("Submit", on_click=submit)

核心改动点:

  1. 修正导入错误:将错误的streamline改为正确的streamlit
  2. 渲染multiselect前先筛选出当前选中值中仍存在于可选列表的有效值,传入组件的default参数,避免默认值不存在的问题
  3. 删除选项时增加存在性校验,避免重复删除抛出异常

内容的提问来源于stack exchange,提问作者arcGuesser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:03:03