从回调函数中创建的另一个下拉列表创建下拉项

Creating a dropdown item from another dropdown created within a callback function

所以我是 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 中的医院从第一个下拉列表中选择。

医院名称在 dfhospital 栏下。

Dash 不喜欢在构建布局后添加组件(例如在回调中),这使得这种方法很困难。我建议查看 this page 并遵循选项卡 "Content as Tab Children" 方法。这将使您至少在布局中保留下拉菜单的基本形式(包括所有重要的 ID),然后使用回调来填充值。

到时候回调应该就简单多了,因为只需要更新已经存在的回调组件的optionsprop