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

如何通过代码批量勾选/取消勾选Streamlit中的所有复选框?

批量控制Streamlit复选框的全选/全清实现

问题场景

通过遍历DataFrame行创建侧边栏复选框,默认未勾选,单个勾选/取消操作正常,但自定义的全选、全清按钮无法生效:

原创建复选框代码:

options = []
for idx, row in df.iterrows():
    option = st.sidebar.checkbox(label=f"{row['title']} ({row['option']})", key=idx)
    options.append([row['title'], option])

原全选/全清函数(无效):

def select_all_fields():
    options = []
    for idx, row in gdf_paper_dry_run.iterrows():
        option = st.sidebar.checkbox(label=f"{row['label']} ({row['option']})", key=idx, value=True)
        options.append([row['label'], option])
        
def clear_all_fields(options_list):
    options = []
    for idx, row in gdf_paper_dry_run.iterrows():
        option = st.sidebar.checkbox(label=f"{row['label']} ({row['option']})", key=idx, value=False)
        options.append([row['label'], option])

问题原因

直接在函数内重新渲染复选框并设置value的方式不生效,因为Streamlit的组件状态由session_state管理,函数执行时的临时渲染无法持久修改组件状态,且组件渲染逻辑应该统一放在主流程中,而非按钮点击的回调里。

正确实现方案

利用Streamlit的session_state直接修改对应复选框key的状态,再统一渲染复选框:

import streamlit as st
import pandas as pd

# 替换为你的实际DataFrame
df = pd.DataFrame({
    "title": ["选项1", "选项2", "选项3"],
    "option": ["A", "B", "C"]
})

# 初始化session_state,存储每个复选框的状态
if "checkbox_states" not in st.session_state:
    st.session_state.checkbox_states = {idx: False for idx in df.index}

# 全选按钮逻辑
if st.sidebar.button("全选"):
    for idx in df.index:
        st.session_state.checkbox_states[idx] = True

# 全清按钮逻辑
if st.sidebar.button("全清"):
    for idx in df.index:
        st.session_state.checkbox_states[idx] = False

# 统一渲染复选框,读取session_state中的状态
options = []
for idx, row in df.iterrows():
    option_state = st.sidebar.checkbox(
        label=f"{row['title']} ({row['option']})",
        key=idx,
        value=st.session_state.checkbox_states[idx]
    )
    # 同步用户手动修改的状态到session_state
    st.session_state.checkbox_states[idx] = option_state
    options.append([row['title'], option_state])

# 可选:展示已选中的选项
st.write("已选中的选项:")
selected = [item[0] for item in options if item[1]]
st.write(selected)

核心逻辑说明

  • 用session_state.checkbox_states字典存储每个复选框(对应DataFrame行索引idx)的勾选状态,实现状态持久化
  • 全选/全清按钮点击时,直接遍历修改session_state.checkbox_states中的所有值为True或False
  • 复选框渲染时,从session_state读取当前状态作为value,同时将用户手动操作后的状态写回session_state,保证状态同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:50