Как получить обратный вызов Bokeh, какой объект вызвал обратный вызов? - PullRequest
0 голосов
/ 20 апреля 2020

Я создаю некоторые функции боке-графиков, которые в зависимости от структуры предоставленных данных будут иметь разное количество виджетов Select.

Таким образом, у меня есть список, называемый «фильтрами», который содержит каждый Выберите виджет в качестве элемента списка:

filter = [Select1, Select2, ....]

Я присваиваю каждой из этих функций один и тот же обратный вызов update_dropdown, как показано ниже. , Для последнего фильтра я наконец назначаю обратный вызов для update_plot.

        for f in filters[:-1]:
            f.on_change('value', update_dropdown)

        filters[-1].on_change('value', update_plot)

Однако, чтобы эта стратегия была эффективной, мне нужно получить, какой из фильтров вызвал обратный вызов update_dropdown внутри update_dropdown 'функция для того, чтобы обновлять другие фильтры соответственно. Можно ли совершить sh это?

Я бы ожидал что-то вроде этого:

def update_dropdown(attr, old, new, FILTER_WHO_TRIGGERED_THE_CALLBACK):
   #doing some stuff here accordingly to the variable FILTER_WHO_TRIGGERED_THE_CALLBACK

Спасибо !!!!

1 Ответ

1 голос
/ 20 апреля 2020

Нет способа сделать это напрямую - вы должны создать отдельный обратный вызов для каждого фильтра.

Что-то вроде:

def bind_cb_obj(cb_obj, cb):
    def wrapped(attr, old, new):
        cb(cb_obj, attr, old, new)

    return wrapped

filters[-1].on_change('value', bind_cb_obj(filters[-1], update_plot))
...