如何在Plotly Dash中动态添加自定义数量Dropdown及解决回调报错
问题原因
- 回调定义格式错误:你将单个Output放在了方括号中,属于多输出定义,要求返回值必须是列表/元组格式;同时你没有覆盖所有逻辑分支的返回值,当判断条件不满足时函数默认返回None,和预期输出格式不符
- Checklist取值逻辑错误:dcc.Checklist的
value属性返回的是所有选中项的列表,你当前代码里的sources_flag勾选后返回值是['Y']而非字符串'Y',因此if value_1 == 'Y'的判断永远不成立,函数始终返回None触发报错
修正后的回调代码
@app.callback( # 去掉Output外层的方括号,改为单输出定义 Output(component_id='source_dropdown_container_output', component_property='children'), [ Input(component_id='drop_downs', component_property='value'), Input(component_id='sources_flag', component_property='value'), ] ) def update_source_dropdowns(dropdown_count, sources_flag): """Controls the number of drop-downs available to choose sources""" # 修正Checklist的取值判断逻辑 if 'Y' in sources_flag: children = [] for i in range(dropdown_count): new_dropdown = dcc.Dropdown( id=f'source_dropdown_{i}', options=[{'label': x, 'value': x} for x in ['GOOG', 'FB', 'TDOC', 'FANG']], placeholder=f'选择第{i+1}个标的' ) children.append(html.Div([ html.P(f"下拉框{i+1}:"), new_dropdown ], style={'margin': '10px 0'})) return children # 补充else分支,未勾选时返回空列表 return []
补充说明
如果你后续需要读取这些动态生成的下拉框的选中值,可以使用Dash的模式匹配回调,通过通配符匹配所有source_dropdown_开头的组件id进行批量取值。
内容的提问来源于stack exchange,提问作者UGuntupalli
相关产品推荐
相关产品推荐

