python - python - 如何根据python dash中另一个下拉列表的用户多值创建动态下拉列表?
问题描述
我正在尝试创建应该根据我的选择出现和消失的动态下拉列表
示例:如果我选择城市,城市的下拉菜单应该出现,当我取消选择城市时,城市的下拉菜单应该消失
而且我可以动态创建下拉列表,但如果尝试取消选择它,只需创建一个新的下拉列表而不是消失。任何帮助都会有所帮助。谢谢
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State, MATCH, ALL
app = dash.Dash(__name__, suppress_callback_exceptions=True)
app.layout = html.Div([
html.Div('My first dropdown'),
dcc.Dropdown(
id="dropdown1",
options=[{'label': i, 'value': i} for i in ['city', 'country', 'continent']],
value=["city"],
multi=True,
),
html.Div(id='dynamic-dropdown-container', children=[]),
])
@app.callback(
Output('dynamic-dropdown-container', 'children'),
Input('dropdown1', 'value'),
State('dynamic-dropdown-container', 'children'))
def display_dropdowns(value, children):
lengthofval=len(value)
new_element = html.Div([
html.Div(
id="title"
),
dcc.Dropdown(
id={
'type': 'dynamic-dropdown',
'index': lengthofval
},
options=[]
),
])
children.append(new_element)
return children
@app.callback(
Output("title","children"),
Input("dropdown1","value")
)
def display_output(value):
return html.Div('selected option {}'.format( value[-1]))
if __name__ == '__main__':
app.run_server(debug=True)
解决方案
以下是您的问题的解决方案,如何根据另一个下拉菜单动态显示和隐藏下拉菜单。该代码要求您从显示或隐藏目标 html Div 元素的回调函数中输出样式值。这可以使用许多不同的值来完成,以从同一源下拉列表中取消隐藏 html Div 元素(在您的代码中,dropdown1 是源下拉列表)。
我已经包含了完整的工作代码,我想如果你查看它,你就会明白它是如何连接在一起的。
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
app = dash.Dash(__name__, suppress_callback_exceptions=True)
app.layout = html.Div([
html.Div('My first dropdown'),
dcc.Dropdown(
id="dropdown1",
options=[{'label': i, 'value': i} for i in ['city', 'country', 'continent']],
value="",
multi=False,
),
html.Div(
[
html.Div([
dcc.Dropdown(
id='dynamic-dropdown-container1',
options=[{'label': i, 'value': i} for i in ['NYC', 'SFO', 'DFW']],
value='',
)],
style={
'display':'block'
}
),
html.Div([
dcc.Dropdown(
id='dynamic-dropdown-container2',
options=[{'label': i, 'value': i} for i in ['USA', 'Italy', 'Japan']],
value='',
)],
style={
'display':'block'
}
)
],
),
])
@app.callback(
Output(
component_id='dynamic-dropdown-container1',
component_property='style'
),
[Input(
component_id='dropdown1',
component_property='value'
)]
)
def update_requested_city(map_option):
if map_option == 'city':
return {'display': 'block'}
else:
return {'display': 'none'}
@app.callback(
Output(
component_id='dynamic-dropdown-container2',
component_property='style'
),
[Input(
component_id='dropdown1',
component_property='value'
)]
)
def update_requested_country(map_option):
if map_option == 'country':
return {'display': 'block'}
else:
return {'display': 'none'}
@app.callback(
Output("title","children"),
Input("dropdown1","value")
)
def display_output(value):
return html.Div('selected option {}'.format( value[-1]))
if __name__ == '__main__':
app.run_server(debug=True)
推荐阅读
- php - React 阻止跨域请求
- visual-studio-2019 - Visual Studio 2019 需要 Dumpbin.exe、editbin.exe 包吗?
- python - 在 azure 上部署 python Azure 函数时获取未找到模块错误
- perl - 锁定哈希键以防止删除
- ios - iOS 中的 Alamofire 正在接收字典而不是数组
- python - 根据具有相邻索引的不同列中的多行编辑熊猫数据框的列
- javascript - 计算指定列表中关键字出现的频率
- java - Spotify:在活动之间传递 SpotifyAppRemote
- c# - c#TextBoxFor 助手在帖子上没有正确绑定
- ms-access - 数据库已被机器 'XXX' 上的用户 'XXX' 置于状态