如何在按钮创建并点击后回调函数运行?

How to make the callback function run after the button is created and clicked?

我是 Dash 的新手,我正在尝试创建一个带有可点击点的地图,点是地点的位置。用户可以通过单击点将单击的位置添加到 his/her 个已保存的位置,然后单击通过在地图旁边的 Div 中单击它创建的按钮。 我的问题是创建按钮后(用户点击圆点),按钮的回调函数会自动运行(打印坐标),但我需要的是运行ning用户点击按钮时的函数(打印坐标)。

代码如下:

@app.callback(
    dash.dependencies.Output('button_list', 'children'),
    [dash.dependencies.Input('map', 'clickData')])
def display_click_data(clickData):
    if clickData is None:
        return 'Click on any points to see more info'
    else:
        coordinate_lon = clickData['points'][0]['lon']
        coordinate_lat = clickData['points'][0]['lat']
        coor = str(coordinate_lon)+","+str(coordinate_lat)
        return html.Button('add to saved locations', id='add_to_saved', value=coor),\
               html.Div(id='button_return', children=[])

如您所见,该函数将return一个按钮放在id='button_list'部分,并在名为'add to saved locations'的按钮的值中保存一个坐标。我为按钮创建了一个回调函数:

@app.callback(
    dash.dependencies.Output('button_return', 'children'),
    [dash.dependencies.Input('add_to_saved','value')],
)
def add_to_saved(value):
    print(value)
    return

我想在点击按钮时打印值(坐标),但是现在这个函数会在按钮创建(用户点击点)后自动运行 请帮忙!预先感谢您的帮助!

当您以这种方式将组件添加到布局时,相关的回调将运行。但是,该按钮当时应该有 n_clicks=0,因此您可以利用它来发挥自己的优势。试试这个回调:

@app.callback(
    dash.dependencies.Output('button_return', 'children'),
    [dash.dependencies.Input('add_to_saved','n_clicks')],
)
def add_to_saved(value):
    if value:
        print(value)
        return value
    return ''

编辑:将 Input 属性更改为 n_clicks