How to fix ImportError: cannot import name 'Event' in Dash from plotly (python)?

Event was removed in the latest version (0.37) of Dash, that's why you cannot import it. See dev comment.

If you're bent on using it, switch to 0.36, but I'd not recommend that.


To preserve using the latest Dash version and keep updated you can use following code to fix the problem:

import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque

X = deque(maxlen=20)
X.append(1)
Y = deque(maxlen=20)
Y.append(1)


app = dash.Dash(__name__)
app.layout = html.Div(
    [
        dcc.Graph(id='live-graph', animate=True),
        dcc.Interval(
            id='graph-update',
            interval=1*1000
        ),
    ]
)

@app.callback(Output('live-graph', 'figure'),
              [Input('graph-update', 'n_intervals')])
def update_graph_scatter(input_data):
    X.append(X[-1]+1)
    Y.append(Y[-1]+Y[-1]*random.uniform(-0.1,0.1))

    data = plotly.graph_objs.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines+markers'
            )

    return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
                                                yaxis=dict(range=[min(Y),max(Y)]),)}


if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=8080 ,debug=True)

The change in this code is just in the callback. The word n_intervals is the new way of Dash to handle events. As the name suggests, n_intervals keeps count of how many times the interval has fired, and so each time the interval fires, n_intervals gets incremented which triggers your callback. The only change you have to make to the callback is to an argument to receive n_intervals, which you can then ignore in the function body.