用后端分页和可选行替换dash.datatable时出现问题

时间:2019-02-19 16:32:05

标签: plotly plotly-dash

在下面的示例中,默认情况下应选择第一行。除非我在table-div中删除对表的替换或取出后端分页,否则不会发生这种情况。

有人暗示为什么会这样吗?

以下代码是分页示例https://dash.plot.ly/datatable/callbacks的简单扩展,添加了一个selected_rows=[0]和重要的是第二个回调,交换了包围div (Output('table-div', 'children')中的表。

import dash
from dash.dependencies import Input, Output, State
import dash_table
import dash_html_components as html
import dash_core_components as dcc
import pandas as pd

app = dash.Dash(__name__)

PAGE_SIZE = 5

def get_data():
    df = pd.DataFrame(pd.util.testing.getTimeSeriesData())
    return df

df = get_data()

def get_table():
    table = dash_table.DataTable(
        id='datatable-paging',
        #data=df.to_dict('rows'),
        columns=[
            {"name": i, "id": i} for i in sorted(df.columns)
        ],
        pagination_settings={
            'current_page': 0,
            'page_size': PAGE_SIZE
        },
        pagination_mode='be',
        row_selectable="single",
        selected_rows=[0],
    )
    return table


def get_layout():
    layout = html.Div([
        html.Button('submit', id='mybutton'),
        html.Div([
            get_table()
        ], id='table-div')
    ], id='layout-div')
    return layout

app.layout = get_layout()


@app.callback(
    Output('table-div', 'children'),
    [
        Input('mybutton', 'n_clicks'),
    ],
    [
        State('table-div', 'children'),
    ]
)
def update_table(n_clicks, tabledivchildren):
    return tabledivchildren
    #return [get_table()]

@app.callback(
    Output('datatable-paging', 'data'),
    [Input('datatable-paging', 'pagination_settings')])
def update_graph(pagination_settings):
    return df.iloc[
        pagination_settings['current_page']*pagination_settings['page_size']:
        (pagination_settings['current_page'] + 1)*pagination_settings['page_size']
    ].to_dict('rows')


if __name__ == '__main__':
    app.run_server(host='0.0.0.0', debug=True)

0 个答案:

没有答案