【发布时间】:2020-06-08 04:38:57
【问题描述】:
当从任何一个下拉列表中选择任何选项时,我希望从所有其他下拉列表中删除相同的选项。
为了帮助可视化这一点,我正在尝试构建一个列映射器。对于左侧的每个列名,右侧都有一个下拉列表,用户可以在其中从他们上传的文件中选择与左侧名称相对应的列名。由于源列和目标列具有一对一的关系,因此当从下拉列表之一中选择列名称时,可以将其从所有其他下拉列表中删除。
作为概念证明,我使用下面的代码在其中一个下拉菜单上进行了尝试。当我从任何其他下拉列表中选择一个选项时,我希望该选项会从这个特定的下拉列表中删除。我没有收到任何错误,回调出现在回调图中,但它什么也没做。回调中的打印语句甚至没有运行,这意味着回调实际上根本没有运行。
def generate_output_callback(input_id):
def dd_callback(input_values, state):
if not input_values:
print('Preventing update.'.upper())
raise PreventUpdate
else:
print(f'callback ran for dropdown {input_id}')
for val in input_values:
if val:
try:
i = state.index({'label': val, 'value': val})
del state[i]
except ValueError:
pass
return state
return dd_callback
all_cols = ['ACCTNUMBER', 'col2', 'col3']
inputs = {}
for col in all_cols:
inputs[col] = Input(col, 'value')
all_other_inputs_dict = {k:v for (k,v) in inputs.items() if k != 'ACCTNUMBER'}
all_other_inputs = list(all_other_inputs_dict.values())
cb = generate_output_callback('ACCTNUMBER')
app.callback(
Output('ACCTNUMBER', 'options'),
all_other_inputs,
[State('ACCTNUMBER', 'options')])(cb)
【问题讨论】:
标签: plotly-dash