从在回调函数中创建的另一个下拉菜单中创建一个下拉菜单项

时间:2019-08-23 03:14:40

标签: callback output plotly dropdown plotly-dash

因此,我是Dash的新手,具有Shiny的经验,并且在配置下拉菜单时遇到了一些麻烦。因此,我在Dash中有3个选项卡,当前的行为是当用户单击medicaid选项卡时创建一个下拉菜单。我不希望在其他两个选项卡中显示此下拉列表,因此为什么在我的回调函数中也是如此。然后,此下拉菜单(例如state dropdown)为用户提供状态列表。

我的问题实际上在于如何从state dropdown获取输入值,因为它在回调函数中...

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
from dash.dependencies import Input, Output
import plotly.graph_objs as go


app = dash.Dash(__name__)

df = pd.read_csv("Timely and Effective Care - Hospital.csv", engine='python', sep=None)

app.layout = html.Div(children=[

    # tab selection menu dynamically created
    html.Div([
       dcc.Tabs(
           id='menu-tabs',
           value='tab-1',
           className='custom-tabs-container',
           children=[
               dcc.Tab(
                   label='Medicaid',
                   value='medicaid',
               ),
               dcc.Tab(
                   label='Commercial',
                   value='commercial',
               ),
               dcc.Tab(
                   label='Uninsured',
                   value='uninsured'
               ),
            ]),
    html.Div(id='state-dropdown'),
    html.Div(id='sample')
    ])

], className='wrapper')


@app.callback(Output('state-dropdown', 'children'),
               [Input('menu-tabs', 'value')])
def render_dropdown(tab):
    if tab == 'medicaid':
        return html.Div(children=[dcc.Dropdown(id='states',
                                  options=[{'label': i, 'value':i}
                                  for i in df['State'].unique()]
                        )])

我想要的是在medicaid标签中创建另一个下拉列表...用户从第一个下拉列表中选择状态后,第二个下拉列表应仅列出从state中选择的医院第一个下拉菜单。

医院名称在hospital的{​​{1}}列下。

1 个答案:

答案 0 :(得分:0)

Dash不喜欢在构建布局(例如在回调内部)之后添加组件,这使此方法变得困难。我建议您查看this page并遵循“内容作为选项卡子级”选项卡。这将使您至少在布局中保留下拉列表的基本形式(包括所有重要的ID),然后使用回调填充值。

到那时,回调应该容易得多,因为它只需要更新已经存在的回调组件的options属性即可。