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