Как создать выпадающее меню при нажатии кнопки? - PullRequest
0 голосов
/ 10 мая 2019

В моем раскрывающемся списке должны отображаться файлы в каталоге, содержимое которого часто меняется.Я попытался:

menu = [(fname, fname) for fname in os.listdir(path)]
dropdown = Dropdown(label='files', menu=menu)

def on_click_handler():
    logger.info('dropdown on click')
    dropdown.menu = [(fname, fname) for fname in os.listdir(path)]

Но когда я нажимаю кнопку выпадающего меню, даже лог-отчет не создается.

1 Ответ

1 голос
/ 10 мая 2019

Оба примера приведены для Bokeh v1.1.0

При использовании обратного вызова Python в серверном приложении Bokeh:

app.py (запускается из командной строки bokeh serve --show app.py)

from bokeh.models import Dropdown
from bokeh.plotting import curdoc

files1 = ['file1', 'file2']
files2 = ['file3', 'file4']
dropdown = Dropdown(label = 'files', menu = [(fname, fname) for fname in files1])

def on_click_handler():
    dropdown.menu = [(fname, fname) for fname in files2]

dropdown.on_click(on_click_handler)
curdoc().add_root(dropdown)

При использовании обратного вызова JS в автономном приложении Bokeh:

app.py (запускается из командной строки python app.py)

from bokeh.models import CustomJS, ColumnDataSource, Select, Column, Dropdown
from bokeh.plotting import figure, curdoc, show

files1 = ['file1', 'file2']
files2 = ['file3', 'file4']
menu1 = [(fname, fname) for fname in files1]
menu2 = [(fname, fname) for fname in files2]
dropdown = Dropdown(label = 'files', menu = menu1)

on_click_handler = CustomJS(args = {'dropdown' : dropdown, 'menu2': menu2}, code = ''' dropdown.menu = menu2;  ''')
dropdown.js_on_change('value', on_click_handler)
show(dropdown)
...