Dash core component for basic Button with click event?

后端 未结 2 1981
攒了一身酷
攒了一身酷 2021-01-03 02:16

I\'m trying to create an app with multiple tabs for different sets of information. My first thought was to use html Buttons but there\'s not dash_core_component for this, an

相关标签:
2条回答
  • 2021-01-03 02:45

    Aha! Finally found the answer, documented here: https://plot.ly/dash/urls

    It would be nice to link this into the User Guide in a more obvious way (in the index?)

    0 讨论(0)
  • 2021-01-03 03:05

    In fact, they do have a click event available for a button in the latest dash_html_components, but it doesn't appear to be fully documented yet. The creator, chriddyp, has stated that the Event object may not be future-proof, but that State should be.

    Using State like:

    @app.callback(
        Output('output', 'children'),
        [Input('button-2', 'n_clicks')],
        state=[State('input-1', 'value'),
         State('input-2', 'value'),
         State('slider-1', 'value')])
    

    you can use values as inputs, without initiating the callback if they change -- instead waiting for the Input('button', 'n_clicks') to fire off the callback.

    Copying full code example below from the link:

    import dash
    from dash.dependencies import Input, Output, State
    import dash_html_components as html
    import dash_core_components as dcc
    
    app = dash.Dash()
    
    app.layout = html.Div([
        html.Button('Click Me', id='button'),
        html.H3(id='button-clicks'),
    
        html.Hr(),
    
        html.Label('Input 1'),
        dcc.Input(id='input-1'),
    
        html.Label('Input 2'),
        dcc.Input(id='input-2'),
    
        html.Label('Slider 1'),
        dcc.Slider(id='slider-1'),
    
        html.Button(id='button-2'),
    
        html.Div(id='output')
    ])
    
    @app.callback(
        Output('button-clicks', 'children'),
        [Input('button', 'n_clicks')])
    def clicks(n_clicks):
        return 'Button has been clicked {} times'.format(n_clicks)
    
    @app.callback(
        Output('output', 'children'),
        [Input('button-2', 'n_clicks')],
        state=[State('input-1', 'value'),
         State('input-2', 'value'),
         State('slider-1', 'value')])
    def compute(n_clicks, input1, input2, slider1):
        return 'A computation based off of {}, {}, and {}'.format(
            input1, input2, slider1
        )
    
    if __name__ == '__main__':
        app.run_server(debug=True)
    
    0 讨论(0)
提交回复
热议问题