Flask Dash应用程序中是否有用户控制的数据刷新方式?

Flask Dash应用程序中是否有用户控制的数据刷新方式?,flask,plotly-dash,plotly-python,Flask,Plotly Dash,Plotly Python,我有一个Dash应用程序,它根据从API中提取的数据生成一些图形,我想给用户一个选项来更改参数,基于此提取新数据,然后重新绘制图形。它可以通过表单实现,但我认为最简单的方法是使用Flask中的路由系统。Dash允许我这样做: import dash import dash_core_components as dcc import dash_html_components as html import plotly.express as px app = dash.Dash(__name__)

我有一个Dash应用程序,它根据从API中提取的数据生成一些图形,我想给用户一个选项来更改参数,基于此提取新数据,然后重新绘制图形。它可以通过表单实现,但我认为最简单的方法是使用Flask中的
路由系统。Dash允许我这样做:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px

app = dash.Dash(__name__)
app.layout = html.Div(children=[
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content'),
])


@app.callback(dash.dependencies.Output('page-content', 'children'),
              [dash.dependencies.Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/':
        return html.Div('Please append a pathname to the route')
    else:
        data = get_data_from_api(int(pathname))
        fig_1 = px.line(data, x="time", y="price")
        fig_2 = px.line(data, x="time", y="popularity")
        return html.Div(children=[
                dcc.Graph(id='fig_1',figure=fig_1),
                dcc.Graph(id='fig_2',figure=fig_2),
            ])


if __name__ == '__main__':
    app.run_server(debug=True)
但问题是API调用需要一两分钟,而且它似乎一直在轮询它,因此请求超时,图形永远不会重新绘制。我需要的是不自动刷新的东西,它可以运行API调用,更新底层数据,然后告诉应用程序刷新其状态


我确实考虑过类似于瓶式混合动力车的冲撞,但对于我的使用情况来说似乎过于复杂。有更简单的方法吗?

我认为您可以在布局中添加一个
html.Button

html.Button('Update', id='update-button')
您可以在回调中添加:

@app.callback(dash.dependencies.Output('page-content', 'children'),
          [dash.dependencies.Input('url', 'pathname'),
           dash.dependencies.Input('update-button', 'n_clicks')])
def display_page(pathname, n_clicks):
    ....
无论如何,无需处理variabel n_点击。回调总是触发的


干杯

谢谢,我要试试这个。出于好奇,难道不可能省略
n_单击
?或者连接按钮需要这些吗?我还没有尝试过。我想它是需要的。是的,它是需要的。你考虑过使用间隔计时器吗?Dash core components有一个间隔:dcc.interval(id=“example interval”,interval=10000),然后您可以使用“example interval”作为回调的输入。您将尝试返回报告,谢谢!