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

如何在Streamlit中实现任意数量选项?适配动态数据的代码方案

问题1:如何在Streamlit中设置任意数量的选项?

有两种常用方案,可根据场景选择:

方案1:使用st.multiselect快速实现多选(推荐)

适合需要批量选择、界面简洁的场景,自动支持任意数量选项:

import streamlit as st

# 任意数量的选项列表(可从数据源/配置动态生成)
options = ["选项A", "选项B", "选项C", "选项D", "选项E"]

# 生成多选组件
selected = st.multiselect("选择任意数量选项", options)

# 展示选中结果
st.write("已选中:", selected)

方案2:动态生成复选框并保存状态

适合需要单独展示每个选项、自定义布局的场景,通过st.session_state持久化选中状态:

import streamlit as st

# 初始化任意数量的选项(可动态从外部获取)
if "dynamic_options" not in st.session_state:
    st.session_state.dynamic_options = ["选项1", "选项2", "选项3", "选项4"]
if "checkbox_states" not in st.session_state:
    st.session_state.checkbox_states = {opt: False for opt in st.session_state.dynamic_options}

# 动态生成复选框
st.subheader("逐个选择选项")
for opt in st.session_state.dynamic_options:
    st.session_state.checkbox_states[opt] = st.checkbox(opt, value=st.session_state.checkbox_states[opt])

# 提取选中的选项
selected_opts = [opt for opt, checked in st.session_state.checkbox_states.items() if checked]
st.write("已选中:", selected_opts)

问题2:实现可读取随文档变化的动态数据的DataFrame

以下是适配动态文档的完整代码,修复了你提供的参考代码中状态丢失、判断逻辑错误的问题:

import streamlit as st
import pandas as pd

# 文件上传组件,支持Excel格式
uploaded_file = st.file_uploader("上传Excel文档", type=["xlsx", "xls"])

if uploaded_file is not None:
    # 读取上传的文件,文件变更时自动重新加载
    all_data = pd.read_excel(uploaded_file)
    columns = list(all_data.columns)

    # 初始化会话状态:记录当前文件名+列选中状态,避免文件切换时状态混乱
    if "last_uploaded_file" not in st.session_state or st.session_state.last_uploaded_file != uploaded_file.name:
        st.session_state.selected_cols = {col: True for col in columns}
        st.session_state.last_uploaded_file = uploaded_file.name

    # 动态生成列选择复选框
    st.subheader("选择要显示的列")
    for col in columns:
        st.session_state.selected_cols[col] = st.checkbox(col, value=st.session_state.selected_cols[col])

    # 筛选并展示选中列的DataFrame
    filtered_cols = [col for col, checked in st.session_state.selected_cols.items() if checked]
    if filtered_cols:
        st.subheader("动态数据预览")
        st.dataframe(all_data[filtered_cols], use_container_width=True)
    else:
        st.warning("请至少选择一列")
else:
    st.info("请上传Excel文件以查看动态数据")

关键特性:

  • 检测文件变更:通过记录上传文件名,切换文件时自动重置列选择状态并重新加载数据
  • 实时交互:修改列选择后,DataFrame会立即更新展示
  • 状态持久化:使用st.session_state保存用户的列选择偏好,避免刷新后丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:12