#python #python-3.x #plotly-dash #plotly-python
#python #python-3.x #plotly-dash #plotly-python
Вопрос:
Я создаю простое приложение с помощью dash. Я использую компонент интервала dcc. Я хочу, чтобы, когда переключатель выключен, мне нужен определенный момент, когда интервал был до того, как он был выключен, и я хочу, чтобы приложение прекратило обновление, затем, когда запускается ползунок, я хочу включить переключатель, и я хочу, чтобы таймер запускался в этот момент до того, как он был выключен.отключено.
Вот фрагмент моего кода
app.layout = html.Div([
dcc.Interval(id='interval-test', interval=1000, disabled =False),
dcc.Interval(id='interval-test2', interval=1000, disabled =False),
dcc.Loading(
id="loading-1"),
daq.BooleanSwitch(
id='control-on',
on=True,
color="#9B51E0"),
dcc.Slider(
id='my-slider',
min=0,
max=20,
step=0.5,
value=10,
),
html.H1(id='test-output1'),
html.H1(id='test-output2'),
html.Div(id='intermediate-value', style={'display': 'none'},)
])
@app.callback(Output('intermediate-value', 'children'),
Output('interval-test', 'disabled'),
Input('control-on', 'on'),
Input('interval-test', 'n_intervals'))
def interval_update(switch, n):
if switch==False:
print('current n', n)
return n, True
@app.callback(Output('interval-test', 'n_intervals'),
Output('interval-test', 'disabled'),
Output('control-on', 'on'),
Input('intermediate-value', 'children'),
Input('my-slider', 'value'))
def interval_update(n, slider):
return n, False, True
if __name__ == '__main__':
app.run_server(debug=True)
К сожалению, я получаю следующую ошибку ниже:
Duplicate callback outputs
In the callback for output(s):
interval-test.n_intervals
interval-test.disabled
control-on.on
Output 1 (interval-test.disabled) is already in use.
Any given output can only have one callback that sets it.
To resolve this situation, try combining these into
one callback function, distinguishing the trigger
by using `dash.callback_context` if necessary.
Есть ли разумный способ справиться с этим?
Ответ №1:
Ваши выходные данные должны быть заключены в квадратные скобки, подобные этому (как и ваши входные данные, на самом деле):
@app.callback([Output('intermediate-value', 'children'),
Output('interval-test', 'disabled')],
[Input('control-on', 'on'),
Input('interval-test', 'n_intervals')])
def interval_update(switch, n):
if switch==False:
print('current n', n)
return n, True
@app.callback([Output('interval-test', 'n_intervals'),
Output('interval-test', 'disabled'),
Output('control-on', 'on')],
[Input('intermediate-value', 'children'),
Input('my-slider', 'value')])
def interval_update(n, slider):
return n, False, True