当我使用普通的Dash callback时,我的应用程序工作得很好,但我现在不得不使用long_callback。在这种情况下,我的旋转器(dcc.Loading)几乎立即消失了--尽管具有讽刺意味的是,这对于旋转器来说似乎是一个非常有用的地方。我试图在下面创建一个最小的例子。
我是误用了纺纱机还是这是个虫子?
import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
from dash.long_callback import DiskcacheLongCallbackManager
import diskcache
import time
cache = diskcache.Cache('./cache')
long_callback_manager = DiskcacheLongCallbackManager(cache)
app = dash.Dash(
__name__,
long_callback_manager=long_callback_manager,
)
app.layout = html.Div(children=[
dcc.Slider(id='my_slider', min=1, max=10, step=1, value=5),
dcc.Loading(
html.Div(id='my_div', children=['Start']),
),
])
@app.long_callback(
Output('my_div', 'children'),
Input('my_slider', 'value'),
interval=2000,
)
def update_div(slider_value):
time.sleep(5)
return f'Done loading: {slider_value}'
if __name__ == '__main__':
app.run_server(debug=True)我试图在loading_state/is_loading参数的running参数中设置long_callback属性,但没有成功。也许这不是“可分割”的财产?
发布于 2022-06-01 11:52:12
不确定这是否是您要寻找的解决方案,但我发现了一种方法,它使用dbc.Spinner和long_callback的but关键字参数一起使用dash引导组件。
首先,在希望旋转器出现的地方创建一个div,给它一个唯一的id名,并将其子级设置为None。对我来说,我使用的是dbc.Row(dbc.Col())而不是div,但它的工作方式应该是一样的。然后,需要设置long_callback的运行关键字参数以输出dbc.Spinner。下面的代码目前正在为我工作。我删除了很多代码,所以忽略了输入、输出和布局组件的缺乏。注意跑腿。
app.layout = dbc.Container(dbc.Row(dbc.Col(id='fs_spinner', children=None)))
@app.long_callback(
output=(
Output("full_search_predictions", "data"),
Output("full_results_query", "data"),
),
inputs=[
Input("submit_button", "n_clicks"),
Input("search_query", "value"),
],
running=[
(Output('fs_spinner', 'children'), dbc.Spinner(size='md'), None)
],
interval=20000,
prevent_initial_call=True,
)以下是正在发生的事情。当long_callback开始时,它会将一个dbc.Spinner()返回给fs_spinner的子组件。回调完成后,它将向fs_spinner的子组件返回None,该组件将从屏幕中移除旋转器。
希望这能有所帮助!
https://stackoverflow.com/questions/70957153
复制相似问题