情节:在回拨清单之前提交按钮?
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
我正在开发 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