从回调函数中创建的另一个下拉列表创建下拉项
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
中的医院从第一个下拉列表中选择。
医院名称在 df
的 hospital
栏下。
Dash 不喜欢在构建布局后添加组件(例如在回调中),这使得这种方法很困难。我建议查看 this page 并遵循选项卡 "Content as Tab Children" 方法。这将使您至少在布局中保留下拉菜单的基本形式(包括所有重要的 ID),然后使用回调来填充值。
到时候回调应该就简单多了,因为只需要更新已经存在的回调组件的options
prop
所以我是 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
中的医院从第一个下拉列表中选择。
医院名称在 df
的 hospital
栏下。
Dash 不喜欢在构建布局后添加组件(例如在回调中),这使得这种方法很困难。我建议查看 this page 并遵循选项卡 "Content as Tab Children" 方法。这将使您至少在布局中保留下拉菜单的基本形式(包括所有重要的 ID),然后使用回调来填充值。
到时候回调应该就简单多了,因为只需要更新已经存在的回调组件的options
prop