单击按钮时如何生成下拉菜单?

时间:2019-05-10 11:08:23

标签: bokeh

我的下拉列表应列出目录中内容经常更改的文件。我尝试过:

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 个答案:

答案 0 :(得分:1)

两个示例均适用于Bokeh v1.1.0

在Bokeh服务器应用程序中使用Python回调时:

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)

在独立的Bokeh应用程序中使用JS回调时:

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)