Я просто знакомлюсь с 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',
),