Кнопка в Dash не имеет "щелчка" как событие

Я добавил кнопку в свой макет. Когда я пытаюсь написать обратный вызов, я получаю следующую ошибку:

dash.exceptions.NonExistantEventException: 
Attempting to assign a callback with
the event "click" but the component
"get_custom_vndr" doesn't have "click" as an event.

Here is a list of the available events in "get_custom_vndr":
[]

Вот как я добавляю его в свой макет:

app_vndr.layout = html.Div([
    html.Button(
        '+',
        id='get_custom_vndr',
        type='submit'
    )
])

и вот функция обратного вызова, которая дает вышеуказанную ошибку:

@app_vndr.callback(
    dash.dependencies.Output('overlay', 'className'),
    events=[dash.dependencies.Event('get_custom_vndr', 'click'),
            dash.dependencies.Event('add_vndr_id_submit', 'click')])
def show_input(b1_n, b2_n):    
    if b1_n>0:
        return ''
    elif b1_n>0:
        return 'hidden'

Я что-то упустил, когда добавил кнопку в свой макет? или когда я попытался написать обратный звонок?

Я получил это работает на

dash.dependencies.Input('get_custom_vndr', 'n_clicks')

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

1 ответ

Dash не позволяет использовать несколько обратных вызовов для одного и того же Output()

Я не совсем уверен, правильно ли я понял ваш вопрос, но посмотрите, поможет ли это...

но я бы хотел использовать две кнопки для одного выхода

Легко! Просто определите явный компонент тире как Выход, а затем две кнопки как Вход. Независимо от того, на какой кнопке нажата кнопка, они оба активируют одну и ту же функцию. Пример:

@app.callback(
    dash.dependencies.Output('overlay', 'className'),
    [dash.dependencies.Input('button1', 'n_clicks'),
     dash.dependencies.Input('button2', 'n_clicks')])

def update_output(n_clicks1, n_clicks2):
    # This is, where the magic happens

и с событием n_clicks, мне нужно попытаться выяснить, какая кнопка была нажата

Если вы хотите использовать две кнопки для одной и той же функции и отличаться от того, какая из них используется, разделите решение выше на две функции:

@app.callback(
    dash.dependencies.Output('overlay', 'className'),
    [dash.dependencies.Input('button1', 'n_clicks')])

def update_output(n_clicks1):
    # This is, where the magic happens for button 1

@app.callback(
    dash.dependencies.Output('overlay', 'className'),
    [dash.dependencies.Input('button2', 'n_clicks')])

def update_output(n_clicks2):
    # This is, where the magic happens for button 2
Другие вопросы по тегам