Есть ли способ обновить два свойства компонента dash с помощью обратного вызова

#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