Dash 应用程序中数据表值发生变化后回调触发的绘图更新

kms*_*kms 7 python plotly plotly-dash plotly-dash-datatable

我的布局中有一个地图和数据表组件,可以通过回调进行更新。数据表是可编辑的,用户可以向新表添加新信息。更新表的点击事件时

我有两个回调,一个用于更新地图,另一个用于数据表。我想做的是从数据表回调内部运行地图回调。基本上,我想根据数据表的值更新地图。

我可以从回调运行另一个回调或在另一个回调中运行某些代码行吗?试图找出一种优雅而有效的方法来做到这一点。

layout = html.Div([

                # Plot map
                dcc.Graph(id="map-graph"),

                # DataTable
                dash_table.DataTable(

                    id="table",

                    columns=[{"id":"Type","name":"Type"},
                                   {"id":"space","name": "space"}],

                    sort_action="native",
                    filter_action="native",
                    row_deletable=True
                ),

                # Update map
                dbc.Button("Update map", id="update-map", className="mr-1"),

                # Update Table
                dbc.Button("Update table", id="update-table", className="mr-1")

 
            ]), 


     # Callbacks 

    # Update map
    @app.callback(Output("map-graph", "figure"),
                          [Input("update-map", "value")])
    def updatemap(value):

         ...
         do something
         ...

         return value

 
    # Update table
    @app.callback(Output("table", "data"),
                          [Input("update-table", "value")])
    def updatetable(value):

         ...
         do something
         ...

         # Run the code inside previous callback which updates the map. 

         return rows
Run Code Online (Sandbox Code Playgroud)

Lig*_*tCC 0

查看 Dash教程 - 第 3 部分:基本回调部分中的 Dash 文档Dash App With Chained Callbacks,目前大约在页面的中间位置。

该部分的基础知识是您可以使用回调的任何输出作为另一个回调的输入。

例如,在第一个回调写入my-output-1value属性之后,第二个回调使用该 id 和属性作为输入来驱动my-output-2id 的value属性。

@app.callback(
    Output('my-output-1', 'value'),
    Input('my-input-1', 'value'))
def set_output_1_from_input_1(input_1_value):
    return input_1_value

@app.callback(
    Output('my-output-2', 'value'),
    Input('my-output-1', 'value'))
def set_output_2_from_output_1(output_1_value):
    return some_function_doing_something(output_1_value)
Run Code Online (Sandbox Code Playgroud)