Python 有没有办法在bokeh的multi-select或select窗口小部件中添加搜索选项?

Python 有没有办法在bokeh的multi-select或select窗口小部件中添加搜索选项?,python,bokeh,Python,Bokeh,我正在使用bokeh中的select小部件以交互方式选择要打印的列。我的用例的列数非常大(>500列)。因此,与滚动所有列名为绘图选择正确的列不同,有没有一种方法可以附加一个简单的搜索框,用于用户输入,并基于该输入,过滤掉500列,即更小的数字,从而更容易选择列 您不能在选择本身中执行此操作。您要么自己创建另一个小部件,要么使用一个单独的文本输入字段,在其中输入一些过滤器。例如: import random import string from bokeh.io import show fro

我正在使用bokeh中的select小部件以交互方式选择要打印的列。我的用例的列数非常大(>500列)。因此,与滚动所有列名为绘图选择正确的列不同,有没有一种方法可以附加一个简单的搜索框,用于用户输入,并基于该输入,过滤掉500列,即更小的数字,从而更容易选择列

您不能在
选择
本身中执行此操作。您要么自己创建另一个小部件,要么使用一个单独的文本输入字段,在其中输入一些过滤器。例如:

import random
import string

from bokeh.io import show
from bokeh.layouts import widgetbox
from bokeh.models import Select, TextInput, ColumnDataSource, CustomJS


def random_str():
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(20))


ds = ColumnDataSource(data=dict(options=[random_str() for _ in range(500)]))
# Setting initial values
s = Select(options=ds.data['options'])
ti = TextInput(placeholder='Enter filter',
               callback=CustomJS(args=dict(ds=ds, s=s),
                                 code="s.options = ds.data['options'].filter(i => i.includes(cb_obj.value));"))

show(widgetbox(ti, s))

该示例不需要
bokeh-serve
——它在浏览器中完成所有过滤。请注意,
TextInput
仅当用户解除小部件焦点或按Enter键时才调用其回调。

单击Select小部件后,您可以使用键盘键入,它将转到最接近的匹配项。因此,如果您使用排序的选项列表,这是一个startEugene,谢谢!非常感谢你的帮助这很酷,谢谢。我有两个注释:1。代码必须针对最新的bokeh版本进行更新(widgetbox已被弃用,TextInput的回调参数已不存在)2。如果我们可以通过bokeh将处理程序附加到keyup事件,那就太好了。。。