Izu*_*ala 8 python plotly plotly-dash
我试图在没有 Input 的情况下调用 plotly-dash 回调,并且该方法不会触发。
这是我尝试使用破折号构建的仪表板。过去,当我对 Input 和 Output 使用回调时,一切正常,但是当我尝试仅使用 output 时,结果不会显示在仪表板上。
html.Div(
[
html.P(
"Tweet Count",
className="twelve columns indicator_text"
),
html.P(
id = 'tweet_value',
className="indicator_value"
),
],
className="four columns indicator",
)
@app.callback(
Output("tweet_value","children")
)
def total_tweet_callback():
return 100
Run Code Online (Sandbox Code Playgroud)
小智 12
所有回调在加载时都会运行一次,除非明确禁用。因此,一个简单的解决方案是使用虚拟输入,引用任何内容,但不使用它。
我不同意另一个答案。直接调用该函数不会使其触发每个“加载”。这样,该函数仅在语句运行时运行一次。该功能仅在应用程序启动时触发,而不是每次单击浏览器刷新按钮时触发。如果您在那里使用datetime.datetime.now(),您可以看到差异。
至少需要一个输入或事件才能调用回调,如dash.py代码中所写:
没有
InputorEvent元素,这个回调永远不会被调用。(订阅输入组件将在它们的值发生变化时调用回调,订阅事件将导致在触发事件时调用回调。)
在您的情况下 - 如果没有回调触发器,为什么要使用回调?如果您只想total_tweet_callback在加载时运行一次,只需从布局中调用它:
def total_tweet_callback():
return 100
app.layout = lambda: html.Div(
[
html.P(
"Tweet Count",
className="twelve columns indicator_text"
),
html.P(
children=total_tweet_callback(),
id='tweet_value',
className="indicator_value"
),
],
className="four columns indicator",
)
Run Code Online (Sandbox Code Playgroud)
请注意:
total_tweet_callback.lambda:并查看它是否仍然有效。您可以使用dcc.Interval.
刷新页面时有效。
from datetime import datetime
# within layout
dcc.Interval(
id="load_interval",
n_intervals=0,
max_intervals=0, #<-- only run once
interval=1
),
html.Span(
id="spanner",
style=dict(color="yellow") #<-- just so it's easy to see
),
# callback
@app.callback(
Output(component_id="spanner", component_property="children"),
Input(component_id="load_interval", component_property="n_intervals"),
)
def update_spanner(n_intervals:int):
return datetime.now()
Run Code Online (Sandbox Code Playgroud)
无论如何,我需要定期刷新初始数据,因此熟悉一下是有好处的Interval。n_intervals有点像n_clicks。
免责声明;我上面的方法是一种黑客,我不知道它是否会长期有效。
| 归档时间: |
|
| 查看次数: |
11235 次 |
| 最近记录: |