特别是对于我的具体情况,使用
dcc.Dropdown
效果非常好。唯一的问题是,在很多情况下,用户可能会选择多个选项,这在视觉上看起来非常难看。
有没有办法让下拉菜单像 这样 ?
我已经想到了关于创建一个打开的菜单,其中包含可以选择作为清单的选项,但这会使代码更复杂,因为我希望允许用户像标准中一样搜索他们想要的选项
dcc.Dropdown
看起来你正在使用 Plotly Dash 并希望自定义
dcc.Dropdown
组件,使其外观和行为更像带有复选框的选择菜单,以便于进行多选。
你绝对没必要构建一个完全自定义的解决方案。Dash 提供了实现此目标的内置方法。诀窍就是使用
multi=True
参数
dcc.Dropdown
。这将使你的下拉菜单在选择时展开,显示所有可用选项及其各自的复选框。用户可以选中或取消选中任意数量的选项。
以下是代码示例:
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Dropdown(
id='demo-dropdown',
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': 'Montreal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value=['MTL', 'SF'], # 设置默认选中的值
multi=True # 启用多选
),
html.Div(id='dd-output-container')
])
@app.callback(
dash.Output('dd-output-container', 'children'),
[dash.Input('demo-dropdown', 'value')]
)
def update_output(selected_values):
return f'你选择了:{", ".join(selected_values)}'
if __name__ == '__main__':
app.run_server(debug=True)
在这个例子中:
-
multi=True
启用下拉列表中的多选功能。 -
value=['MTL', 'SF']
在初始状态下选择“Montreal”和“San Francisco”。 - 该回调函数演示了如何使用所选值,但你可以根据自己的需要进行调整。
通过这种方法,你保留了
dcc.Dropdown
(包括搜索功能)的所有内置功能,同时允许用户以更友好的方式选择多个选项。