Python 如何在Dash/Plotly应用程序中自动添加多个图形的回调
在一个单页应用程序中,我想显示许多类似的图表 为此,我创建了一个“工厂类”,它可以生成许多图形 此类公开Dash应用程序的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(
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中应用的回调中声明的输出,按从上到下的顺序排列