带有全选复选框的破折号数据表?

Sun*_*oiz 6 plotly-dash

我想知道是否有人知道如何在 Dash 数据表中创建一个“全选”复选框(它应该在红框区域)?这个想法是它将选择数据表中的所有可用行。

在此处输入图片说明

我已经通读了整个 Datatable 文档(https://dash.plotly.com/datatable/interactivity),但没有提到这一点。尝试在线搜索也失败了。

我记得 dash-tables-experiment 有这个功能,但它已经被弃用了。任何意见是极大的赞赏。

Ste*_*eij 9

目前,元素内不支持此选项dash_table.DataTable。但是,有一个解决方法,可以dbc.Button()在 Dash 中添加两个部分layout,第一个用于选择所有,第二个用于取消选择所有。然后,@app.callback单击按钮后即可选择(取消)选择所有内容。

你会得到这样的东西:

未选择行:未选择行

单击按钮后选择的所有行: 单击后选择所有行

回调看起来像下面这样(感谢这个 git issues中的@neilpanchal ):

from loguru import logger
import dash
...

@app.callback(
    [Output('df-table', 'selected_rows')],
    [
        Input('select-all-button', 'n_clicks'),
        Input('deselect-all-button', 'n_clicks')
    ],
    [
        State('df-table', 'data'),
        State('df-table', 'derived_virtual_data'),
        State('df-table', 'derived_virtual_selected_rows')
    ]
)
def select_all(select_n_clicks, deselect_n_clicks, original_rows, filtered_rows, selected_rows):
    ctx = dash.callback_context.triggered[0]
    ctx_caller = ctx['prop_id']
    if filtered_rows is not None:
        if ctx_caller == 'select-all-button.n_clicks':
            logger.info("Selecting all rows..")
            selected_ids = [row for row in filtered_rows]
            return [[i for i, row in enumerate(original_rows) if row in selected_ids]]
        if ctx_caller == 'deselect-all-button.n_clicks':
            logger.info("Deselecting all rows..")
            return [[]]
        raise PreventUpdate
    else:
        raise PreventUpdate
Run Code Online (Sandbox Code Playgroud)