Из документов объект Selection
говорит:
Выборки обычно создаются путем выбора точек на графике с помощью SelectTool, но также могут быть заданы программно.
Но я не умею устанавливать некоторые выбранные точки программно.Например, если я хочу обновить выбор, нажав на какую-нибудь кнопку.Я могу обновить элемент source.selected.indices
, но событие не инициируется, и точки не помечаются как выбранные
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.layouts import column
from bokeh.models.tools import LassoSelectTool, TapTool
from bokeh.models.widgets.buttons import Button
source = ColumnDataSource(dict(
x=[1, 2, 3, 4, 5, 6],
y=[1, 2, 3, 4, 5, 6],
))
p = figure(
plot_height=300,
tools='',
)
p.circle( x='x', y='y', size=20, source=source)
lasso_select = LassoSelectTool(
select_every_mousemove=False,
)
tap = TapTool()
tools = (lasso_select, tap)
p.add_tools(*tools)
def update_selection_programmatically():
source.selected.update(indices=[4]) # the indices attribute is updated but the figure is not repainted, some event is not triggered.
# So the points are not marked as selected
bt = Button(
label="Update Selection",
button_type="success",
width=50
)
bt.on_click(update_selection_programmatically)
def update_selection(attr, old, new):
print('>> NEW SELECTION: {}'.format(new.indices))
# new.indices = [0] # this works fine here
source.on_change('selected', update_selection)
curdoc().add_root(column([p, bt]))
Атрибут индексов обновляется, но рисунок не перерисовывается.