import panel as pn pn.extension() select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, levels=["Model", "Resolution", "Initialization"], ) select select.value select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, levels=["Model", "Resolution", "Initialization"], layout=pn.Row ) select select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, levels=["Model", "Resolution", "Initialization"], layout={"type": pn.GridBox, "ncols": 2} ) select select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, ) select.value select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, value={"Model": "NAME", "Resolution": "12 km", "Initialization": "12Z"}, levels=["Model", "Resolution", "Initialization"], ) select select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, value={"Initialization": "12Z", "Resolution": "0.5 deg"}, levels=["Model", "Resolution", "Initialization"], ) select select = pn.widgets.NestedSelect( options={ "NAME": {}, "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, }, levels=["Model", "Resolution", "Initialization"], ) select select.value = {"Model": "NAME"} def list_options(level, value): if level == "time_step": options = {"Daily": list_options, "Monthly": list_options} elif level == "level_type": options = {f"{value['time_step']}_upper": list_options, f"{value['time_step']}_lower": list_options} else: options = [f"{value['level_type']}.json", f"{value['level_type']}.csv"] return options pn.widgets.NestedSelect( options=list_options, levels=["time_step", "level_type", "file_type"], ) select = pn.widgets.NestedSelect( options={ "GFS": { "0.25 deg": ["00Z", "06Z", "12Z", "18Z"], "0.5 deg": ["00Z", "12Z"], "1 deg": ["00Z", "12Z"], }, "NAME": { "12 km": ["00Z", "12Z"], "3 km": ["00Z", "12Z"], }, }, value={"Model": "NAME", "Resolution": "12 km", "Initialization": "00Z"}, levels=[ {"name": "Model", "type": pn.widgets.RadioButtonGroup, "button_type": "primary"}, {"name": "Resolution", "type": pn.widgets.Select, "width": 100}, {"name": "Initialization", "type": pn.widgets.DiscreteSlider, "width": 100}, ], ) select