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

如何检测Streamlit应用侧边栏复选框是否被点击

问题修复方案

你的代码核心问题是未根据复选框的选中状态做条件判断,还存在语法错误与逻辑漏洞,以下是修正后的代码及说明:

问题点拆解

  1. 你用checkboxes[key] == "df1"这类语句只是做了值比较,既没有用if触发判断逻辑,还搞错了判断对象——复选框的返回值是布尔值(True/False),不是字符串。
  2. 无论复选框是否被选中,你都直接往dfs列表里添加数据框,导致无法根据选择过滤内容。
  3. 函数参数里的df未被使用,反而用到了未定义的df_list,参数逻辑不一致。

修正后的代码

# 假设你在其他地方已创建数据框列表df_list,比如df_list = [df1, df2]
from typing import List
import pandas as pd
import streamlit as st

names = ["df1", "df2"]

def create_checkboxes(names: List[str], df_list):
    checkboxes = {}
    # 创建复选框并存储每个框的选中状态
    for name in names:
        checkboxes[name] = st.sidebar.checkbox(name, key=name, value=True)

    dfs = []
    # 根据复选框选中状态,筛选需要合并的数据框
    for idx, (name, is_checked) in enumerate(checkboxes.items()):
        if is_checked:
            dfs.append(df_list[idx])

    # 合并选中的数据框,处理未选中任何框的情况
    if len(dfs) > 0:
        df = pd.concat(dfs)
    else:
        df = pd.DataFrame()  # 无选中时返回空数据框,可根据需求调整

    return df, checkboxes

关键修改说明

  • 调整函数参数为df_list,和代码中实际用到的变量对齐,确保传入的是对应的数据框列表。
  • 遍历复选框时同时获取索引idx,保证名称与df_list里的数据框一一对应。
  • 用if is_checked:判断复选框是否被选中,仅选中时才添加对应的数据框。
  • 增加了未选中任何框的处理逻辑,避免pd.concat因空列表报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:27:13