如何用Python与Streamlit为12列批量添加带多选框表格的展开器
批量实现Streamlit 12列展开器布局
需求:实现12列布局,每列包含一个
st.expander展开器,每个展开器内有带表格的st.multiselect多选组件。目前已手动添加部分列逻辑,需要将display_month_list函数批量添加到每一列中。
用户原代码:
def display_month_list(df,month): df_test = df.iloc[:,[0,1,2,3]] option_list = df_test["categories"].unique().tolist() selected_option = st.multiselect("Select Category",option_list) if selected_option: df_test = df_test[df_test["categories"].isin(selected_option)] st.write(df_test) col1,col2,col3,col4 = st.columns(4) col5,col6,col7,col8 = st.columns(4) col9,col10,col11,col12 = st.columns(4) with col1: with st.expander("cat1"): display_month_list(df,"cat1") with col2: with st.expander("cat2"): display_month_list(df,"cat2")
批量实现方案
通过循环遍历列列表批量生成内容,替代手动逐个编写的冗余代码,实现更简洁的逻辑:
优化后的完整代码:
import streamlit as st import pandas as pd def display_month_list(df, month_label): # 原函数中month参数未实际使用,重命名为month_label增强可读性 df_test = df.iloc[:, [0,1,2,3]] option_list = df_test["categories"].unique().tolist() # 多选框标题加入标签,方便区分不同列 selected_option = st.multiselect(f"Select Category ({month_label})", option_list) if selected_option: df_test = df_test[df_test["categories"].isin(selected_option)] st.write(df_test) # 一次性创建12列对象的列表 cols = st.columns(12) # 循环遍历每一列,自动生成对应内容 for idx, col in enumerate(cols, start=1): cat_label = f"cat{idx}" with col: with st.expander(cat_label): display_month_list(df, cat_label)
关键说明
- 用
st.columns(12)直接生成12个列对象,避免分三组创建的冗余代码 - 通过
enumerate循环同时获取列的索引(从1开始)和列对象,自动生成cat1到cat12的标签 - 调整多选框标题加入列标签,方便用户区分不同列的操作区域(可根据实际需求修改)
内容的提问来源于stack exchange,提问作者DevLeb2022
相关产品推荐
相关产品推荐

