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

dash_tabulator使用cellClick获取列信息时Python回调返回None如何解决

dash_tabulator cellClick事件Python回调返回None问题解决

问题原因

  1. 在DashTabulator的options中配置的cellClick是Tabulator原生的事件回调,函数返回值只会被Tabulator内部处理,不会自动同步到Dash组件的公开属性上,因此Python侧无法直接通过监听组件属性拿到返回值。
  2. 之前代码中注释的setProps调用对象错误,没有找到对应的Dash组件实例执行属性更新,导致cellClick属性一直保持初始的None值。

解决方法

1. 修改JavaScript侧cellClick回调

替换原有JS回调逻辑,不要直接返回数据,通过Tabulator实例找到对应的Dash组件,调用setProps方法主动更新cellClick属性:

cellClick:function(e, cell){
    // 你需要的列详情数据
    const columnDef = cell.getColumn().getDefinition();
    const clickData = {
        'field': columnDef.field,
        'title': columnDef.title,
        'cell_value': cell.getValue(), // 可选,可追加单元格值、行数据等其他信息
        'row_data': cell.getRow().getData()
    };
    // 找到DashTabulator组件实例更新属性
    cell.getTable().element.parentElement.setProps({
        cellClick: clickData
    });
}

2. 验证Python回调

无需修改原有Python回调代码,触发cellClick事件后打印selected_cell即可拿到你配置的列字段、标题等数据。

适配旧版本dash_tabulator备选方案
如果你使用的版本不支持直接更新cellClick属性,可通过dcc.Store中转数据:

  1. 布局中新增中转存储组件:dcc.Store(id='cell_click_store', data=None)
  2. JS回调修改为更新Store组件的数据:
cellClick:function(e, cell){
    const columnDef = cell.getColumn().getDefinition();
    const clickData = {'field': columnDef.field, 'title': columnDef.title};
    document.querySelector('#cell_click_store')._dashprivate_layout.props.setProps({
        data: clickData
    });
}
  1. Python回调修改为监听Store的data属性:Input('cell_click_store', 'data')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:09:00