python - dash核心下拉回调更新问题
问题描述
我创建了 2 个下拉菜单。它们都在单个按钮上触发。4 天前,这种布局效果很好。但是从几天前开始,只有一个回调被触发,而不是另一个。我试图查看未触发的回调。结果是回调触发,但它没有返回任何内容。我试图打印所有内容,直到返回相同的回调。一切都打印得很好。核心组件是否有任何变化?
import numpy as np
import pandas as pd
import dash
import dash_table
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input,Output,State
app.scripts.config.serve_locally = True
app.config['suppress_callback_exceptions'] = True
app.layout = html.Div([
html.Button('get attributes',id='get_attributes',n_clicks=0),
dcc.Dropdown(id="select_dep_var"),
html.Div(id = 'store_dep_var'),
dcc.Dropdown(id="drp1"),
dcc.Dropdown(id="drp2"),
])
@app.callback(Output('drp1','options'),
[Input('get_attributes','n_clicks'),
Input('select_dep_var','children')])
def drp1update(n_click,depend_var):
if n_click > 0:
if depend_var is not None:
return [{'label': i, 'value': i} for i in data[depend_var].unique()]
@app.callback(Output('drp2','options'),
[Input('get_attributes','n_clicks'),
Input('select_dep_var','children')])
def drp2update(n_click,depend_var):
if n_click > 0:
if depend_var is not None:
return [{'label': i, 'value': i} for i in data[depend_var].unique()]
@app.callback(Output('store_dep_var','children'),
[Input('select_dep_var','value')])
def store_dep_var(dep_var):
return dep_var
@app.callback(Output('select_dep_var','options'),
[Input('get_attributes','n_clicks')])
def select_dep_var(click):
if click >0:
print('returning attributes in dropdown')
print(click)
print(data.columns)
return [{'label': i, 'value': i} for i in data.columns]
if __name__ == '__main__':
app.run_server(debug=True)
解决方案
看起来您的两个回调接受了错误的输入,drp1update
并且drp2update
. 我认为他们正在接受children
,select_dep_var
但他们应该接受。value
@app.callback(Output('drp1','options'),
[Input('get_attributes','n_clicks'),
Input('select_dep_var','value')])
def drp1update(n_click,depend_var):
if n_click > 0:
if depend_var is not None:
return [{'label': i, 'value': i} for i in data[depend_var].unique()]
@app.callback(Output('drp2','options'),
[Input('get_attributes','n_clicks'),
Input('select_dep_var','value')])
def drp2update(n_click,depend_var):
if n_click > 0:
if depend_var is not None:
return [{'label': i, 'value': i} for i in data[depend_var].unique()]
当我进行更改时,回调起作用并更新了其他两个下拉列表中的值。我只是使用了一个虚拟数据框。您可能还可以n_clicks
从这两个回调中删除输入,因为下拉列表中的值足以触发它们。
推荐阅读
- .net - 部署在 Elastic Beanstalk 上的 .NET Core Docker 应用程序无法访问 RDS MySQL 实例
- c# - 将取消令牌传递给异步流的正确方法是什么?
- javascript - 从 DIV 元素获取图形数据
- laravel - 导出到 Excel 在 laravel livewire 中不起作用
- javascript - 如何在 javascript 模块中加载 json 文件?
- java - 信息 REST API 失败并出现 404
- ssl - Amazon MQ 客户端使用哪个 TLS/SSL 版本连接到代理?
- angular - 如何在 Angular 9 应用程序中设置路由器通配符例外?
- javascript - 类型错误:module.exports 不是函数
- r - 将鼠标移动到一个点并左右滚动 Rselenium