import dash
import dash_cytoscape as cyto
import dash_html_components as html
import dash_daq as daq
from dash.dependencies import Input, Output, State

app = dash.Dash(__name__)

app.layout = html.Div([

    html.Div([
        html.Button('Button', id='btn-node', n_clicks_timestamp=0)
    ]),

    cyto.Cytoscape(
        id='cytoscape-elements-basic',
        layout={'name': 'preset'},
        style={'width': '100%', 'height': '400px'},
        elements=[]
    )
])

@app.callback(
    Output('cytoscape-elements-basic', 'elements'),
    Input('btn-node', 'n_clicks_timestamp'),
    State('cytoscape-elements-basic', 'elements'))
def update_elements(btn, elements):

    some_list = [1,2,3]

    if int(btn):

        return [{'data': {'id': x}} for x in some_list]

    return elements

if __name__ == '__main__':
    app.run_server(debug=True)