【发布时间】:2021-02-12 21:01:03
【问题描述】:
我有一个简单的仪表板应用程序,其中包含用作过滤器的折线图和单选按钮。
我创建了 2 个回调 - 第一个用于 url,第二个用于过滤器。但是,当我运行应用程序时,它一直在更新(我想在循环中调用第二个回调)。这两个回调似乎有些相互依赖,但我希望它们是独立的——只有在单选按钮(过滤器)更改时,我才需要运行第二个。
没有第一个回调,一切正常。
@app.callback(
Output('page-content', 'children'),
[Input('url', 'pathname')]
)
def display_page(pathname):
if pathname == '/':
return '404'
elif pathname == '/something/my-dashboard':
return app.layout
else:
return '404'
@app.callback(
Output("main-chart", "figure"),
Input("category", "value")
)
def update_graph(category):
dff = melted[melted["category"] == category]
fig = create_chart(dff)
set_style(fig, category)
return fig
编辑: 添加布局
app.layout = html.Div(
[ dcc.Location(id='url', refresh=False),
html.Div(
[
html.Div(
[
html.H1(children="My dashboard"),
html.Div([dcc.Graph(id="main-chart", figure=fig)]),
],
className="column1",
),
html.Div(
[
dbc.Label("Filter", style={'fontWeight':'bold'}),
dcc.RadioItems(
id="category",
options=[{"label": i, "value": i} for i in categories],
value="Product A",
labelStyle={"display": "block"},
),
],
className="column2",
),
],
className="row",
id='page-content'
),
]
)
@BasvanderLinden 建议后的EDIT2:
fig = create_chart(df)
set_style(fig, "Marketing")
app.layout = html.Div(
[ dcc.Location(id='url', refresh=False),
html.Div(
className="row",
id='page-content'
),
]
)
dashboard_layout = html.Div(
[
html.Div(
[
html.H1(children="My dashboard"),
html.Div([dcc.Graph(id="main-chart", figure=fig)]),
],
className="column1",
),
html.Div(
[
dbc.Label("Category", style={'fontWeight':'bold'}),
dcc.RadioItems(
id="category",
options=[{"label": i, "value": i} for i in categories],
value="Marketing",
labelStyle={"display": "block"},
),
],
className="column2",
),
],
)
@app.callback(Output("page-content", "children"), [Input("url", "pathname")])
def display_page(pathname):
print(pathname)
if pathname == "/":
return "404"
elif pathname == "/my-dashboard":
return dashboard_layout
else:
return "404"
@app.callback(
Output("main-chart", "figure"),
Input("category", "value")
)
def update_graph(category):
dff = df[df["Category"] == category]
fig = create_chart(dff)
set_style(fig, category)
return fig
if __name__ == "__main__":
app.run_server(debug=True, host="0.0.0.0")
【问题讨论】:
-
能否也包括您的布局?这听起来类似于问题here。您是否有多个
Location组件或具有相同ids的其他组件? -
@BasvanderLinden 添加了
标签: python plotly-dash