Кнопка в 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