Как получить все выбранные значения динамически выбранного выпадающего в одном списке? - PullRequest
0 голосов
/ 09 марта 2020

Как получить все значения динамически выбранного выпадающего списка в одном списке? Я попытался выполнить обратный вызов внутри функции обратного вызова с итерацией l oop, но не смог получить нужный список.

Проблема с def a_function , где присутствует обратный вызов внутри функции обратного вызова.

Как получить в одном списке несколько раскрывающихся списков, которые динамически обновляются?

import dash
import dash_core_components as dcc
import dash_html_components as html

step = html.Div(
        children=[
            "Menu:",
            dcc.Dropdown(options=[{'label': v, 'value': v} for v in ['option1', 'option2', 'option3']])
        ])

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__,external_stylesheets=external_stylesheets)
app.config['suppress_callback_exceptions']=True

div_list = [step]

app.layout = html.Div(
    children=[
        html.H1(children='Hello Dash'),
        html.Div(id='step_list', children=div_list),
        html.Div(id='local'),
        html.Button('Add Step', id='add_step_button', n_clicks_timestamp='0'),
        html.Button('Remove Step', id='remove_step_button', n_clicks_timestamp='0'),
        html.Div(id='tester_div'),
        html.Div(id='tester_div_2')])

@app.callback(
    [dash.dependencies.Output('step_list', 'children'),
    dash.dependencies.Output('local','value')],
    [dash.dependencies.Input('add_step_button', 'n_clicks_timestamp'),
    dash.dependencies.Input('add_step_button', 'n_clicks'),
     dash.dependencies.Input('remove_step_button', 'n_clicks_timestamp')],
    [dash.dependencies.State('step_list', 'children')])
def add_step(add_ts, clicks, remove_ts, div_list):
    add_ts = int(add_ts)
    remove_ts = int(remove_ts)
    if add_ts > 0 and add_ts > remove_ts and len(div_list) < 4:
        div_list += [html.Div(children=[
            "Menu:",
            dcc.Dropdown(id='dropdown_id_{}'.format(clicks), options=[{'label': v, 'value': v} for v in ['select1', 'select2', 'select3']])
        ])]
    if len(div_list) > 1 and remove_ts > add_ts:
        div_list = div_list[:-1]
    return div_list,len(div_list)


@app.callback(
    dash.dependencies.Output('tester_div', 'children'),
    [dash.dependencies.Input('local', 'value')])
def a_function(value):
    all_output = []
    if value:
        for i in range(1,value+1):
            @app.callback(dash.dependencies.Output('tester_div_2','children'),
                          [dash.dependencies.Input('dropdown_id_{}'.format(i), 'value')])
            def drop_output(valued):
                all_output.append(valued)
    return all_output

if __name__ == '__main__':
    app.run_server(debug=False)

На этом изображении выходные данные должны быть в списке, подобном следующему: [option2, select1]

На этом изображении вывод должен быть в виде списка: [option3, select3, select1, select2]

1 Ответ

1 голос
/ 10 марта 2020

Da sh не работает с компонентами, идентификаторы которых отсутствуют при первоначальной сборке макета. Динамическое добавление таких компонентов может работать, только если эти компоненты уже присутствуют на странице при первой загрузке, возможно, как скрытые компоненты, которые вы позже откроете. Обратные вызовы внутри обратных вызовов, насколько я знаю, не будут работать по аналогичным причинам, но вы можете создавать обратные вызовы в al oop.

. Вам нужно будет немного переделать настройку макета, и возможно, отредактируйте свой пост, если вам нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...