Bokeh: вызвать обратный вызов, если запущен другой обратный вызов - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь сделать основной инструмент поиска для моего приложения Bokeh.Базовый процесс:

  1. Пользователь вводит поисковый запрос в виджет TextInput .

  2. Значение TextInput передается в функцию поиска, которая возвращает список (кортежей) параметров для виджета MultiSelect .

Я запускаю свое приложение с помощью локального сервера:

bokeh serve --show my_app

Я не могу получить свои опции MultiSelect для обновления с помощью обратного вызова.

def createtab_search():

    # callback text_input
    def callback_text_input(attr, old, new):
        print("Previous label: " + old)
        print("Updated label: " + new)

    text_input = TextInput(value="search here", title="Search:")
    text_input.on_change("value", callback_text_input)


    # callback search results    
    def callback_search_result(attr,old,new):
        search_results = search_function(text_input.value)
        options = [(k,k) for k in search_results.items()]
        multi_select.options = options

    # results dropdown
    multi_select = MultiSelect(title="Results:",
                           value=[],
                           options=[])
    multi_select.on_change("options",callback_search_result)         

    # Layout setup
    layout = column(text_input,multi_select)

    #output tab
    tab = Panel(child = layout, title = 'Search')
    return tab

1 Ответ

0 голосов
/ 30 мая 2019

Я решил это, вызвав 2-й обратный вызов из первого. Поэтому всякий раз, когда я обновляю поисковый термин в TextInput , вызывается функция поиска, и параметры виджета MultiSelect перезаполняются.

def createtab_search():

    # callback text_input
    def callback_text_input(attr, old, new):
        callback_search_result(attr, old, new)

    text_input = TextInput(value="search here", title="Search:")
    text_input.on_change("value", callback_text_input)


    # callback search results    
    def callback_search_result(attr,old,new):
        search_results = search_function(text_input.value)
        options = [(k,k) for k in search_results.items()]
        multi_select.options = options

    # results dropdown
    multi_select = MultiSelect(title="Results:",
                           value=[],
                           options=[])
    multi_select.on_change("options",callback_search_result)         

    # Layout setup
    layout = column(text_input,multi_select)

    #output tab
    tab = Panel(child = layout, title = 'Search')
    return tab
...