短划线核心下拉回调更新问题

时间:2019-04-15 06:24:44

标签: python plotly plotly-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)

1 个答案:

答案 0 :(得分:0)

您的两个回调似乎输入了错误的drp1updatedrp2update。我认为他们从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输入,因为下拉菜单中的值足以触发它们。