我的Dash应用程序具有以下输入和按钮组件:
html.Div(
dcc.Input(
id='id_selector',
placeholder='',
type='text',
value=''
)
),
html.Button(
type = 'submit',
id = 'submit-button',
className = 'btn btn-info',
children = [
html.Span('Go!'),
]
)
和这些组件:
html.Div(id='output'),
html.Div(
dcc.Graph(id='heatmap_id')
)
然后我添加一个这样的回调:
app.callback(
Output(component_id='output', component_property='children'),
[Input('submit-button','n_clicks')],
[State('id_selector', 'value')])
def update_output(n_clicks, input_ID):
print(input_ID)
return html.Div(
"you have selected"+input_ID
,id='output')
但是,当我这样做时,回调函数会执行多次,而不仅是单击按钮时。
如果我进行了更改:
app.callback(
Output('heatmap_id', 'figure'),
[Input('submit-button','n_clicks')],
[State('id_selector', 'value')])
def update_output(n_clicks, input_ID):
print(input_ID)
{HERE I CREATE A THE FIG}
fig = go.Figure(data=data, layout=layout)
return fig
在这种情况下,一切正常,仅当我单击按钮时才执行回调。
为什么有这种区别?
之所以要使用第一个选项(返回一个html.Div而不是一个数字)是因为当我进入我的应用程序时,在第二种情况下我有一个空白图,并且我想在这里有一个空白首先。
答案 0 :(得分:0)
我已经解决了, 问题是线
return html.Div(
"you have selected"+input_ID
,id='output')
应该是:
return html.Div(
"you have selected"+input_ID
)