情节:在回拨清单之前提交按钮?

Plotly: Submit button before Call back for the Checklist?

我正在开发 Dash 数据可视化应用程序,我必须 select 清单中给出的参数,如图所示。当我 select/de-select 逐一检查清单中的选项时,后台回调会针对每个输入执行。

例如,在图像中您可以看到默认值,我已经 select 编辑了所有 12 个变量。但是假设我只需要 select 5 个变量,而我尝试 de-select 其他 7 个变量,每次 de-select 时都会执行后台回调,在本例中为 7 次,这需要很多时间来执行,理想情况下我希望它只执行一次。我可以对下面的代码做任何更改吗,比如添加提交按钮,后台代码只会在我需要时执行,而不是在我 select 或 de-select 清单项目时执行?

dcc.Checklist(id='parameter-checklist',
    options=checklist_dict,
    value=available_indicators[:]
) 
    

更新其中一条评论中所述的代码:

假设我必须在 ID 为 'text-is' 的文本框中打印文本 selected 作为清单中的选项。但它应该只在按下某些提交点击时打印,而不是每次我更改清单的输入时。

import dash
import dash_core_components as dcc


available_indicators = ['Vorrollieren_Drehzah_Spindell',
 'Vorrollieren_Kraft_Spindell',
 'Vorrollieren_Kraft_Vorschub',
 'Vorrollieren_Weg']
checklist_dict = [{'label': 'Vorrollieren_Kraft_Spindell',
  'value': 'Vorrollieren_Kraft_Spindell'},
 {'label': 'Vorrollieren_Kraft_Vorschub',
  'value': 'Vorrollieren_Kraft_Vorschub'},
 {'label': 'Vorrollieren_Weg', 'value': 'Vorrollieren_Weg'}]


app.layout = html.Div(         
        [html.H3(children='Data Visualization For AK_Powertrain'),


dcc.Checklist(id='parameter-checklist',
    options=checklist_dict,
    value=available_indicators[:]
),  
)

@app.callback(
    [dash.dependencies.Output('text-id', 'value')
     ],
    [dash.dependencies.Input('parameter-checklist', 'value')
     ])
def update_graph_cluster( parameter_checklist):


    return parameter_checklist

是的,你可以做到。将新的提交按钮设置为回调的 Input,并将复选框中的值用作 State

编辑: 这是构造回调的方式,假设您在布局中添加 ID 为 "submit_button" 的按钮以使用此清单。这样,清单不会激活回调,只会激活按钮。

@app.callback(
    dash.dependencies.Output('text-id', 'value'),
    [
        dash.dependencies.Input('submit_button', 'n_clicks'),
    ],
    [
        dash.dependencies.State('parameter-checklist', 'value'),
    ])
def update_graph_cluster(button_clicks, parameter_checklist):
    # whatever callback code...

好的,经过一番研究,我找到了这个问题的答案。

我们只需要在 'if' 语句中使用按钮,然后我们可以在按下按钮时包含清单操​​作。

代码可能如下所示:

@app.callback(
    [ dash.dependencies.Input('parameter-checklist', 'value'),
     dash.dependencies.Input('btn-nclicks-1', 'n_clicks')])
def do_computation(parameter_checklist, btn1):

    changed_id = [p['prop_id'] for p in dash.callback_context.triggered][0]

    if 'btn-nclicks-1' in changed_id:

        print('button is pressed') 
        #do checklist operation