сюжетная черта, обратный вызов с двумя кнопками и выпадающим - PullRequest
0 голосов
/ 04 января 2019

Как мне написать обратный вызов, чтобы при нажатии кнопки 1 сделать A; если кнопка 2 нажата, сделайте B; если значение раскрывающегося списка изменилось, C?

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash(__name__)
app.layout = html.Div([
        html.H1('initial', id = 'h1'),
        html.Button('to upper', id = 'upper button', n_clicks_timestamp = '0'),
        html.Button('to lower', id = 'lower button', n_clicks_timestamp = '0'),
        dcc.Dropdown(options = [{'value':s, 'label': s} for s in ['good','bad']], value = 'good', id = 'set string')
    ])

@app.callback(
         dash.dependencies.Output('h1', 'children'),
         [dash.dependencies.Input('upper button', 'n_clicks_timestamp'), 
          dash.dependencies.Input('lower button', 'n_clicks_timestamp'), 
          dash.dependencies.Input('set string', 'value')],
         [dash.dependencies.State('h1', 'children')]
    )
def update(upper, lower, newstring, currentstring):
    upper, lower = int(upper), int(lower)

    # ???
    # if dropdown changed, return newstring
    # ???

    if upper > lower:
        return currentstring.upper()
    if lower > upper:
        return currentstring.lower()

    return newstring

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

Поскольку в раскрывающемся списке отсутствует свойство timestamp, невозможно определить, является ли это последним изменением.

1 Ответ

0 голосов
/ 10 января 2019

В вашем обратном вызове кнопки нажимаются несколько раз? Если нет, то когда обратный вызов вызван выпадающим списком, кнопки будут иметь 0 как n_clicks и None (или также 0, я не помню) как n_clicks_timestamp. Таким образом, вы можете сделать вывод, что выпадающий список вызвал обратный вызов в процессе исключения.

Если кнопки нажимаются несколько раз, вам нужно создать еще один обратный вызов для свойства children элемента Div, содержащего кнопки, и просто повторно создать экземпляры кнопок, чтобы они по-прежнему оставались равными 0 * 1006. * и отметка времени для следующего обратного вызова.

...