Python 如何在Dash/Plotly应用程序中自动添加多个图形的回调

Python 如何在Dash/Plotly应用程序中自动添加多个图形的回调,python,dashboard,python-decorators,plotly-dash,Python,Dashboard,Python Decorators,Plotly Dash,在一个单页应用程序中,我想显示许多类似的图表 为此,我创建了一个“工厂类”,它可以生成许多图形 此类公开Dash应用程序的app.layout和@app.callback代码中要使用的方法。带有两个图形的示例app.py如下所示: import ... app = dash.Dash(__name__) graph_A = GraphFactory(feature="A") graph_B = GraphFactory(feature="B") app.layout = html.Div(

在一个单页应用程序中,我想显示许多类似的图表

为此,我创建了一个“工厂类”,它可以生成许多图形

此类公开Dash应用程序的
app.layout
@app.callback
代码中要使用的方法。带有两个图形的示例
app.py
如下所示:

import ...

app = dash.Dash(__name__)

graph_A = GraphFactory(feature="A")
graph_B = GraphFactory(feature="B")

app.layout = html.Div([
            graph_A.graph(),
            graph_B.graph(),
            ])

@app.callback(
    graph_A.callback_output(), graph_A.callback_inputs()
)
def update_A(value):
    return graph_A.callback_update(value)

@app.callback(
    graph_B.callback_output(), graph_B.callback_inputs()
)
def update_B(value):
    return graph_B.callback_update(value)
这个很好用。但是,我想显示
GraphFactory
对象列表中的许多图形。创建对象并将其放入应用程序布局很容易:

graph_list = [ GraphFactory(feature=f) for f in feature_list ]

app.layout = html.Div([ 
            g.graph() for g in graph_list
            ])


但是**如何添加许多
回调\u输出()
回调\u输入()
回调\u更新(值)
调用?有没有办法只编写一次装饰器和函数,并将调用添加到其中的
回调函数…
函数?

通过深入研究装饰器,我自己找到了一个解决方案:您可以直接调用对象的
回调函数的破折号装饰器。因此,对于问题中的示例,您可以写:

for g in graph_list:
    dash_app.callback(g.callback_output(),
                      g.callback_inputs())(g.callback_update)

请注意,
g.callback\u update
没有
()
,因为
app.callback
函数应用于
g.callback\u update
函数/方法,而不是像往常一样应用于其返回值。

如果其他人寻求其他方法,Dash 0.39中引入了一个解决方案-多输出

使用输出列表/元组作为回调中的输出。 从回调返回值的元组/列表 返回的列表必须与输出列表具有相同的长度 输出道具按照它们在输出>列表中声明的顺序应用

“Applied”=在app.layout中应用的回调中声明的输出,按从上到下的顺序排列