Plotly Dash Chain Callbacks Fail - PullRequest
       25

Plotly Dash Chain Callbacks Fail

0 голосов
/ 17 февраля 2019

Я просто знакомлюсь с Dash, поэтому не уверен, что правильно понял.Реализация обработки событий в Dash мне кажется нелогичной.

У меня есть график (пока что заглушенный), ползунок, который определяет, какая часть моего набора данных будет отображаться на графике, и кнопка для увеличениязначение слайдера.(Это очень упрощенная версия того, что я пытаюсь выполнить в конце, но я застрял на этом этапе.)

Проблема, с которой я сталкиваюсь, заключается в том, что когда нажатие кнопки обновляет ползунок, ползунокизменения.но это изменение ползунка не доходит до обратного вызова, который обновляет график.(Изменение ползунка вручную вызовет обратный вызов обновления графика.)

Я что-то упустил?Как я могу сделать это?(Обратите внимание, что если я добавлю событие кнопки, как во входном декораторе для обратного вызова обновления графа, то у меня не будет контроля над порядком обратных вызовов, AFAIK. Таким образом, обновление графа может произойти без обновления времени начала..)

Вот как я реализовал обратные вызовы:

    # Update the graph whenever the start_time_slider value changes.
    # Update the value of the start_time_slider whenever the up button is clicked. Then, let the programmatic slider change cause the slider to fire an event, updating the graph.

    # When start_time_slider changes, update the graph
    @app.callback(
        dash.dependencies.Output('indicator-graphic', 'figure'),
            [dash.dependencies.Input('start-time-slider', 'value'),
             dash.dependencies.Input('graph-width-slider', 'value')]
            )
    def update_graphs(range_start,graph_width):
        print('Graph is updated. Start Time is {}, Width is {}'.format(range_start,graph_width))
        return None

    # On button click, update the start_time_slider
    @app.callback(
        dash.dependencies.Output('start-time-slider', 'value'),
        [dash.dependencies.Input('up-button', 'n_clicks')]
    )
    def graph_start_button_clicked(click_up, click_dn):
        self.graph_start_time += self.graph_width
        return self.graph_start_time

У меня изначально был настроен ползунок, чтобы вызывать обратный вызов только при "mouseup".Я подумал, что это может помешать запуску из-за программных изменений, поэтому я решил это убратьПри его удалении событие нажатия кнопки не перешло в обновление графика.

                    dcc.Slider(
                        id='start-time-slider',
                        min=self.slider_start_time,
                        max=self.slider_end_time,
                        step=self.graph_start_time,
                        value=self.slider_start_time,
                        # updatemode='mouseup',
                    ),
...