Dash中是否存在带可删除条目、回车新增的自定义文本输入组件?
Dash对应功能组件方案
你需要的这类「支持回车添加可删除标签条目的输入组件」在Dash生态中有成熟实现,不需要改造Dropdown即可使用,有两类可选方案:
方案1:直接使用现成组件
推荐使用Dash Mantine Components库中的TagsInput组件,完全匹配你的需求:
- 无预设选项限制,支持用户任意输入内容
- 输入完成后按回车键即可自动生成带删除按钮的独立标签条目
- 支持单条删除、批量清空、重复值校验等扩展功能
- 可自定义标签样式、输入提示、最大条目数量等参数
方案2:用原生核心组件自定义实现
如果不想引入额外的第三方组件库,也可以用Dash原生组件组合实现基础功能:
- 基础组件搭配:
dcc.Input(文本输入)+dcc.Store(存储已添加的条目列表) + 动态渲染的html.Button(单条删除按钮) - 核心回调逻辑参考:
# 简化版核心回调示例 import dash from dash import Input, Output, State, ALL, html, dcc import json app = dash.Dash(__name__) app.layout = html.Div([ dcc.Input(id='text-input', placeholder='输入内容后按回车添加'), dcc.Store(id='tag-store', data=[]), html.Div(id='tag-container') ]) @app.callback( Output('tag-store', 'data'), Input('text-input', 'n_submit'), Input({'type': 'delete-btn', 'index': ALL}, 'n_clicks'), State('text-input', 'value'), State('tag-store', 'data'), prevent_initial_call=True ) def update_tags(n_submit, delete_clicks, input_val, existing_tags): ctx = dash.callback_context trigger_info = ctx.triggered[0]['prop_id'] # 回车触发新增标签逻辑 if 'n_submit' in trigger_info and input_val.strip(): existing_tags.append(input_val.strip()) return existing_tags # 点击触发删除标签逻辑 else: trigger_id = json.loads(trigger_info.split('.')[0]) existing_tags.pop(trigger_id['index']) return existing_tags # 动态渲染标签列表的回调 @app.callback( Output('tag-container', 'children'), Input('tag-store', 'data') ) def render_tags(tags): return [ html.Span([ tag, html.Button('×', id={'type': 'delete-btn', 'index': idx}, n_clicks=0) ], style={'margin': '0 5px', 'padding': '2px 6px', 'border': '1px solid #ccc', 'border-radius': '3px'}) for idx, tag in enumerate(tags) ]
内容的提问来源于stack exchange,提问作者Wojciech Książek
相关产品推荐
相关产品推荐

