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

Streamlit中AG Grid在st.tabs下固定列宽异常变为0的问题求助

问题诊断与解决建议

首先,你的代码里有个致命变量错误:

  • 你在AgGrid组件中传入的是selected_vessel_df,但前面过滤主题数据得到的是selected_subject_df,这会导致表格渲染错误的数据集,甚至因为结构不匹配直接引发列宽被压缩到0的问题。先把这个变量名修正为selected_subject_df。

针对多Tab下AG Grid列宽异常的问题,再补充几个关键优化点:

1. 给列定义强制设置最小宽度

检查get_grid_options函数返回的列配置,确保每个需要固定宽度的列同时设置width和minWidth,避免列宽被压缩至0:

# 示例列定义(在get_grid_options中)
column_defs = [
    {
        "headerName": "分类名称",
        "field": "category_name",
        "width": 180,
        "minWidth": 120,  # 强制最小宽度,防止被压缩
        "resizable": True
    },
    # 其他列同理配置
]

2. 每个Tab的表格用独立的gridOptions实例

Streamlit的Tabs组件在渲染时会复用DOM元素,共享同一个gridOptions会导致列宽计算冲突。确保循环内每个Tab都生成独立的gridOptions:

# 循环内每次调用get_grid_options生成新实例
subject_overview_grid_options = get_grid_options(
    'subject_overview_categories', 
    selected_subject_df, 
    recent_period=recent_period_month
)
# 可选:添加唯一标识强制独立渲染
subject_overview_grid_options["domLayout"] = "normal"

3. 禁用自动列宽调整

确保gridOptions里没有开启自动调整列宽的配置,同时显式关闭自动尺寸计算:

subject_overview_grid_options.update({
    "suppressAutoSize": True,
    "suppressColumnVirtualisation": False  # 根据数据量调整,大数据量建议开启
})

4. 开启Tab切换时的布局重计算

在AgGrid组件中添加update_mode参数,确保切换Tab时表格重新计算布局:

AgGrid(
    selected_subject_df,  # 已修正的变量名
    custom_css=custom_css,
    gridOptions=subject_overview_grid_options,
    allow_unsafe_jscode=True,
    alwaysShowHorizontalScroll=True,
    height=850,
    theme='balham',
    update_mode='MODEL_CHANGED'  # 强制切换Tab时更新布局
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:46:13