【问题标题】:How to update datatable inside a function using Callback?如何使用回调更新函数内的数据表?
【发布时间】:2020-07-18 06:58:24
【问题描述】:

嗨,伙计们,我尝试更新从这样的 display() 函数初始化的应用程序内的数据表数据,但数据表没有更新,但是如果在没有 display() 的情况下初始化应用程序但直接在里面写入 div,数据表已更新,如果我在函数中声明 div,是否有办法使用回调更新数据表数据?

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

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')

app = dash.Dash(__name__)



states = df.State.unique().tolist()

app.layout = display()

@app.callback(
    Output('table-container', 'data'),
    [Input('filter_dropdown', 'value') ] )
def display_table(state):
    dff = df[df.State==state]
    return dff.to_dict("records")

display()

if __name__ == '__main__':
    app.run_server(debug=True, use_reloader=False)

def display() :
   return html.Div(
    children=[
    dcc.Dropdown(
            id='filter_dropdown',
            options=[{'label':st, 'value':st} for st in states],
            value = states[0]
            ),
    dt.DataTable(id='table-container') ]
    )```

【问题讨论】:

    标签: python callback plotly-dash


    【解决方案1】:

    在布局上设置初始数据看起来可以实现你所需要的:

    import dash
    import dash_html_components as html
    import dash_core_components as dcc
    import dash_table as dt
    from dash.dependencies import Input, Output
    import pandas as pd
    
    
    df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
    app = dash.Dash(__name__)
    
    states = df.State.unique().tolist()
    
    @app.callback(Output('table-container', 'data'),
                  [Input('filter_dropdown', 'value') ])
    def display_table(state):
        dff = df[df.State==state]
        return dff.to_dict("records")
    
    
    def display() :
       return html.Div(
        children=[
        dcc.Dropdown(
                id='filter_dropdown',
                options=[{'label':st, 'value':st} for st in states],
                value = states[0]
                ),
        dt.DataTable(
            id='table-container',
            columns=[{"name": i, "id": i} for i in df.columns],
            data=df.to_dict('records')
            )]
        )
    
    
    app.layout = display()
    
    
    if __name__ == '__main__':
        app.run_server(debug=True, use_reloader=True)
    

    【讨论】:

    • 就是这样。 Dash 不喜欢未初始化的值。您甚至可以在加载时将其设置为 data=[],并让回调使用实际数据对其进行更新。
    • 不敢相信这是导致问题的原因!非常感谢汤姆!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多