Как автоматически добавлять обратные вызовы для нескольких графиков в приложении Dash / Plotly - PullRequest
0 голосов
/ 23 января 2019

В одностраничном приложении Dash by Plotly Я хочу показать много похожих графиков.

Для этого я создал «фабричный класс», который может генерировать много графиков.

Этот класс предоставляет методы для использования в коде app.layout и @app.callback приложения Dash. Пример 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
            ])

Но ** как я могу добавить множество вызовов callback_output(), callback_inputs() и callback_update(value)? Есть ли способ написать декоратор и функцию только один раз и добавить туда вызовы к callback_... функциям?

1 Ответ

0 голосов
/ 23 января 2019

Покопавшись в декораторах, я сам нашел решение: Вы можете напрямую вызывать декоратор Dash для функции callback_update объекта.Так что для примера из вопроса вы можете написать:

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

Обратите внимание, что g.callback_update не имеет (), потому что функция app.callback применяется к g.callback_update функция / метод , не так, как обычно возвращаемое значение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...