有没有办法在散景中为多选或选择小部件添加搜索选项?

时间:2018-03-20 23:41:16

标签: python bokeh

我在散景中使用选择小部件以交互方式选择要绘制的列。我的用例的列数非常大(> 500列)。因此,有没有一种方法可以为用户输入附加一个简单的搜索框并基于该输入,而不是滚动所有列名称,以过滤500列以表示更小的数字 - 制作更容易选择列。

1 个答案:

答案 0 :(得分:1)

您无法在Select本身中执行此操作。您必须自己创建另一个窗口小部件或使用单独的文本输入字段,您可以在其中输入一些过滤器。一个例子:

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 - 它会在您的浏览器中执行所有过滤。请注意,仅当用户取消窗口小部件或按Enter键时,TextInput才会调用其回调。