我正在使用Dash-Plot.ly创建仪表板,并且需要定期更新。我发现dcc.Interval()
组件可以完成这项工作,但是发生了奇怪的行为。如果代码正确,则回调仅被调用一次,如果代码中出现错误(例如引用不存在的变量),则会显示循环行为。有什么问题的想法吗?
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly
from dash.dependencies import Input, Output
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout=html.Div([dcc.Interval(id='interval-component',
interval=1*1000, n_intervals=0)], id="acoolId")
@app.callback(
Output('acoolId', 'children'),
[Input('interval-component', 'n_intervals')])
def timer(n):
# print(asdlol) # if this line is enabled, the periodic behavior happens
return [html.P("ASD " + str(n))]
if __name__ == '__main__':
app.run_server(debug=True)
答案 0 :(得分:2)
问题是您的回调函数用ID children
替换了元素的"acoolID"
,这就是您的interval
组件所在的位置。因此,回调将触发一次,并替换回调的输入,从而无法再次触发。
将布局更改为类似的内容,以使您更新的children
是不同的组件:
app.layout = html.Div(
children=[
dcc.Interval(id='interval-component',
interval=1 * 1000,
n_intervals=0),
html.Div(id="acoolId", children=[]),
]
)
我已经对此进行了测试,并且回调现在可以正常工作。