如何在Dash Mantine Component中设置联动多选框默认值
解决DMC MultiSelect默认全选联动选项的问题
要实现页面刷新时Operator Name自动选中所有可用选项,你需要同时联动更新它的data和value属性,而不只是data。具体修改如下:
- 修改回调的输出目标:让回调同时返回Operator组件的
data和value两个属性 - 在回调函数中同步设置value:把计算出的所有可用Operator列表同时作为
data和value返回
修改后的完整代码:
html.Div( className='accordion-content', children=[ html.H5('Block Name', style={'marginTop':20}), dmc.MultiSelect( placeholder="Select Block Name", id="multiselect-block", value=all_blocks['Block_Name'].to_list(), data=all_blocks['Block_Name'].to_list(), style={'marginTop':10}, clearable=True, searchable=True, nothingFound= 'No Options Found' ), html.H5('Operator Name', style={'marginTop':20}), dmc.MultiSelect( placeholder="Select Operator Name", id="multiselect-operator", value=[], # 初始化留空即可,回调会自动填充 data=[], style={'marginTop':10}, clearable=True, searchable=True, nothingFound= 'No Options Found' ) ] ) @app.callback( # 同时绑定data和value两个输出属性 [Output('multiselect-operator', 'data'), Output('multiselect-operator', 'value')], Input('multiselect-block', 'value') ) def set_operator_option(chosen_block): if chosen_block is None or not chosen_block: # 未选择Block或清空选择时返回空列表 return [], [] else: df_operator = all_blocks[all_blocks['Block_Name'].isin(chosen_block)] operator_list = pd.unique(df_operator['Operator'].to_list()) # 同时返回选项列表和选中值(全选) return operator_list, operator_list
关键说明:
- 页面加载时,
multiselect-block的初始值是所有Block,回调会自动触发,计算出对应的所有Operator,同时把这些Operator设为multiselect-operator的选项和选中值 - 修改Block的选择时,Operator的选项和选中值会同步更新为当前Block对应的所有Operator
- 增加
not chosen_block判断,处理Block被清空的情况,避免出现异常
内容的提问来源于stack exchange,提问作者naranara
相关产品推荐
相关产品推荐

