3

我在布局中添加了一个按钮。当我尝试为其编写回调时,出现以下错误:

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 进行比较来尝试找出单击了哪个按钮,这看起来很漂亮hacky 的方式来做到这一点。

4

2 回答 2

1

Dash 不允许对同一个 Output() 进行多次回调

于 2019-12-06T09:52:13.320 回答
-3

我不确定我是否正确理解了你的问题,但是看看,如果这有帮助......

但我想为相同的输出使用两个按钮

简单的!只需将显式破折号组件定义为输出,然后将两个按钮定义为输入。不管点击哪个按钮,都会触发相同的功能。例子:

@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
于 2018-03-23T12:46:34.703 回答