我有一个简短的代码,它使用dcc.Interval组件来更新回调中的文本,在其中我尝试打印出n_intervals属性的值。
from dash import Dash, html, dcc, Input, Output
app = Dash()
dccinterval = dcc.Interval(
id='interval-component',
interval=1000,
n_intervals=0
)
app.layout = html.Div(
children=[
html.Div(id='live-update-text'),
dccinterval
]
)
@app.callback(Output('live-update-text', 'children'),
Input(dccinterval, 'n_intervals'))
def update_message(n):
print('current interval in update_message: ', dccinterval.n_intervals)
print('current n in update_message: ', n)
return 'Message: ' + str(n)
if __name__ == '__main__':
app.run_server(debug=True, port=8058)这是输出:
current interval in update_message: 0
current n in update_message: 0
current interval in update_message: 0
current n in update_message: 1
current interval in update_message: 0
current n in update_message: 2
current interval in update_message: 0
current n in update_message: 3
.
.
.正如您可能看到的那样,通过输入获得的n_intervals值正在正确地变化,但是直接从interval组件获得的值始终保持在0。我想知道为什么。有人能帮我吗?我需要弄清楚这一点的原因是,在我的应用程序中,当我试图通过组件更改n_intervals的值时失败了。也就是说,当我尝试通过执行dccinterval.n_intervals = a number来设置值时,它不起作用。
非常感谢您的评论!
发布于 2022-04-16 13:28:58
dccinterval.n_intervals的出现很奇怪,因为这不是使用interval组件的正确方式。另一种方法是使用n (表示Input的间隔的函数参数)是正确的方法。但是,您的Input定义有点不正确。不必引用组件的变量(即dccinterval ),您需要引用该组件的id,如下所示:
Input('interval-component', 'n_intervals')如果要更新该区间的值,则需要设置一个回调,该回调将其用作Output,如下所示:
Output('interval-component', 'n_intervals')该函数将return要将间隔更新到哪个值。
编辑:所以,错误的方式不能工作的原因是,在布局中声明的变量dccinterval,在本例中,没有包含应用程序运行后的所有细节。回调函数的参数n在本例中具有正确的信息,因为它已经通过Dash更新。这与Dash的工作原理有关,以及如何--更深入地--在引擎盖下工作。
https://stackoverflow.com/questions/71862799
复制相似问题