I would like to change the selected options of an plotly dash checklist by an callback. My minimal working example is as following but it doesn’t work for now. (Values should change by hitting the ‘load’ button → at loading the page, nothing ist selected, after click the button ‘SF’ should be selected):
import dash
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Checklist(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': 'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
labelStyle={'display': 'block'},
value=[]
),
html.Button('load', id='load-button', n_clicks=0)
])
@app.callback(Output('checkliste', 'value'),
Input('load-button', 'n_clicks'))
def change_values(n_clicks):
if n_clicks > 1:
return ['SF']
if __name__ == '__main__':
app.run_server(debug=False)
Hope, someone can help!
HI @HConBike and welcome to the Dash community!
Be sure to check out the Dash tutorial for more details and examples on callbacks.
A couple things to keep in mind
- All the components used in callbacks must have a unique
id
. There is no id
for the dcc.Checklist
in your code
- There must be a return statement. In this case, there is no return defined if
n_clicks < 1
-
if n_clicks > 1
means the button must be clicked twice for something to happen. It should be n_clicks > 0
Try running this example:
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Checklist(
id="checklist",
options=[
{"label": "New York City", "value": "NYC"},
{"label": "Montréal", "value": "MTL"},
{"label": "San Francisco", "value": "SF"},
],
labelStyle={"display": "block"},
value=[],
),
html.Button("load", id="load-button", n_clicks=0),
]
)
@app.callback(Output("checklist", "value"), Input("load-button", "n_clicks"))
def change_values(n_clicks):
return ["SF"] if n_clicks > 0 else []
if __name__ == "__main__":
app.run_server(debug=True)
1 Like
Thanks so much! Sometimes it’s the little things that you overlook…
1 Like