破折号,循环回调输入

Dash, circular callback inputs

我想用 Dash 编写的应用程序有问题。我有两个不同的清单(指标 A,指标 B)。我的目标是用户可以只为一个指标选择多个选项。所以允许选择a,b,c和1。同时selectc和2,3应该也是可以的。另一方面,应防止 a,c 和 1,2 的 select 离子。我的方法是下面的代码:

app.layout = html.Div([
    html.Label('indicator A'),
    dcc.Checklist(
        id = 'i_a',
        options=[
            {'label': 'a', 'value': 'a'},
            {'label': 'b', 'value': 'b'},
            {'label': 'c', 'value': 'c'}
        ],
        value = ['a']
    ),
    html.Label('indicator B'),
    dcc.Checklist(
        id='i_b',
        options=[
            {'label': '1', 'value': '1'},
            {'label': '2', 'value': '2'},
            {'label': '3', 'value': '3'}
        ],
        value=['1']
    ),
])

@app.callback(
    Output('i_b', 'value'),
    Input('i_a', 'value')
)
def change_b(value_a):
    return ['1']

@app.callback(
    Output('i_a', 'value'),
    Input('i_b', 'value')
)
def change_b(value_b):
    return ['a']

这会造成无限循环,因为回调会相互触发。但是,我不知道如何解决这个问题。我很感激任何帮助:)

我认为你需要的是新的circular callbacks能力。查看此页面上的示例,我认为它们与您正在做的非常相似。