I want to build an app where 3 inputs are dependant on one another. I get 1 (tab) and 2 (group) two show the desired results, however 3 (subgroup) always shows more results than possible.
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
df = pd.read_csv('M:\dashApp\df.csv', sep = ',', index_col = False)
#all_options = df.to_dict()
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
dcc.Dropdown(
id = 'tab_dropdown',
options=[{'label' : k, 'value' : k} for k in df.tab.unique()],
value = 'crop'
),
html.Hr(),
dcc.Dropdown(id = 'group_dropdown'),
html.Hr(),
dcc.Dropdown(id = 'subgroup_dropdown'),
html.Hr(),
html.Div(id='display_selected_values')
])
@app.callback(
Output('group_dropdown', 'options'),
[Input('tab_dropdown', 'value')])
def set_group_options(selected_tab):
return[{'label': i, 'value': i} for i in df.group[df.tab == selected_tab].unique()]
@app.callback(
Output('group_dropdown', 'value'),
[Input('group_dropdown', 'options')])
def set_group_values(availabe_options):
return availabe_options[0]['value']
@app.callback(
Output('subgroup_dropdown', 'options'),
[Input('group_dropdown', 'value')])
def set_subgroup_options(selected_group):
return[{'label': j, 'value': j} for j in df.subgroup[df.group == selected_group].unique()]
@app.callback(
Output('subgroup_dropdown', 'value'),
[Input('subgroup_dropdown', 'options')])
def set_subgroup_values(availabe_sub_options):
return availabe_sub_options[0]['value']
@app.callback(
Output('display_selected_values', 'children'),
[Input('tab_dropdown', 'value'),
Input('group_dropdown', 'value'),
Input('subgroup_dropdown', 'value')])
def set_display_children(selected_tab, selected_group, selected_subgroup):
return 'you have selected {} and {} option {}'.format(
selected_tab, selected_group, selected_subgroup
)
if __name__ == '__main__':
app.run_server(debug=True)