我可以在 Python Dash 中创建多个下拉菜单吗?

Can I create multiple dropdown menus in Python Dash?

我目前 运行 Python 中的下拉菜单一直运行良好。

'stat_option' 正在加载要使用的值列表,然后回调将值发送到用于 y 轴的数据帧。到目前为止,还不错..

     dcc.Dropdown(
         id='stats_dropdown',
         options = stat_opt,
         style = {
             'width': '35%'
         },
     ),
     dcc.Graph(
         id='graph',
     ),

...app.callback...

@app.callback(
    dash.dependencies.Output('graph', 'figure'),
    [dash.dependencies.Input('stats_dropdown', 'value')])

def update_graph(value):
    datasets = df.to_json()
    dff = px.line(df, x = 'time', y = value, color = 'host', line_group = 'host', hover_name = "host", title = 'stats').update_xaxes(categoryorder = "category ascending")
    figure = dff
    return(figure)

我想创建第二个下拉菜单,为 x 轴提供一个值。我创建了第二个下拉菜单,并引用 'date_opt' 变量中的唯一日期列表:

     dcc.Dropdown(
         id='date_dropdown',
         options = date_opt,
         style = {
             'width': '35%',
         },
     ),

但是当我为 date_dropdown 分配新的输入时:

@app.callback(
    dash.dependencies.Output('graph', 'figure'),
    [dash.dependencies.Input('date_dropdown', 'value')],
    [dash.dependencies.Input('stats_dropdown', 'value')])

我收到以下错误:

dash.exceptions.IncorrectTypeException: The state argument `date_dropdown.value` 
must be of type `dash.State`.

因为这复制了 stats_dropdown,我猜这个错误与处理多个输入有关?我一直在搜索 plotly 论坛和 Whosebug 线程,但在找到多个输入的答案方面并没有取得多大成功,我希望有 dash 经验的人可以阐明我的问题,以及哪里是个好地方会找到一些答案(一个例子也很好)。

Dash 回调采用三个参数(第三个是可选的)。第一个参数是dash.dependencies.Output的列表,第二个参数是dash.dependencies.Input的列表,第三个参数是dash.dependencies.State的列表。旁注:如果你只有一个输出,你可以传递它而无需将它放入列表中。但是,这不适用于输入或状态。

这意味着您在这里有两个选择,您可以将统计下拉列表作为状态 (1),这意味着它不会在更改时触发回调或作为输入,然后将其添加到输入列表 ( 2)(并且它会在更改时触发回调)。

(1)
@app.callback(
    dash.dependencies.Output('graph', 'figure'),
    [dash.dependencies.Input('date_dropdown', 'value')],
    [dash.dependencies.State('stats_dropdown', 'value')])

(2)
@app.callback(
    dash.dependencies.Output('graph', 'figure'),
    [dash.dependencies.Input('date_dropdown', 'value'),
     dash.dependencies.Input('stats_dropdown', 'value')])

您的错误是因为您将 dash.dependencies.Input 作为第三个参数传递,而它们只能作为第二个参数传递。