Here, try this instead:
from dash import ctx, Patch, no_update
from dash_extensions.enrich import dcc
from dash_extensions.enrich import DashProxy, html, Input, Output, State
from dash_extensions import EventListener
from dash.exceptions import PreventUpdate
import plotly.graph_objects as go
event = {"event": "click", "props": ['ctrlKey']}
kwargs = {
"meta_tags": [
{"name": "viewport", "content": "width=device-width, initial-scale=1, shrink-to-fit=no", "charset": "utf-8"}],
"title": "Event Listener",
}
app = DashProxy(__name__, **kwargs)
def dummy_graph():
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 2, 3], name=f'Trace 1'))
fig.add_trace(go.Scatter(x=[4, 5, 6], y=[1, 2, 3], name=f'Trace 2'))
fig.add_trace(go.Scatter(x=[7, 8, 9], y=[1, 2, 3], name=f'Trace 3'))
return fig
app.layout = html.Div(
[
EventListener(
events=[event], logging=True, id="el",
),
dcc.Graph(
id="graph",
figure=dummy_graph()
),
html.Div(id="output"),
html.Div(id="log")
]
)
@app.callback(
[Output("output", "children"),
Output("graph", "figure")],
[Input("graph", "restyleData"),
State("el", "event")],
prevent_initial_call=True
)
def display_relayout_data(relayout_data, e):
triggered_input = ctx.triggered_id
if triggered_input == "graph":
print(e)
if e is not None:
if e['ctrlKey'] == True:
new_fig = Patch()
del new_fig['data'][relayout_data[1][0]]
return "", new_fig
raise PreventUpdate
if __name__ == "__main__":
app.run_server(debug=True)
Click events also have ctrlKey
.