首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dash - Interval不调用回调

Dash - Interval不调用回调
EN

Stack Overflow用户
提问于 2019-05-23 23:51:07
回答 1查看 1.8K关注 0票数 2

我正在使用Dash - Plot.ly创建仪表板,并且需要定期更新。我找到了应该完成这项工作的dcc.Interval()组件,但是发生了一种奇怪的行为。在代码正确的情况下,回调只被调用一次,如果代码中有错误,比如引用了不存在的变量,循环行为就会出现。你知道哪里出了问题吗?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 08:15:05

问题是您的回调正在用ID "acoolID"替换元素的children,而这正是您的interval组件所在的位置。因此,回调触发一次,并替换回调的输入,使得不可能再次触发。

将布局更改为如下所示,以便您更新的children是不同的组件:

代码语言:javascript
复制
app.layout = html.Div(
    children=[
        dcc.Interval(id='interval-component', 
                     interval=1 * 1000, 
                     n_intervals=0),
        html.Div(id="acoolId", children=[]),
    ]
)

我已经测试过了,回调现在可以正常工作了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56278912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档