You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:33:02