Python 散景问题回调

Python callback in Bokeh issue

我试图根据这个简单的例子让回调函数在散景中工作:

from bokeh.plotting import figure, curdoc
from bokeh.layouts import column
from bokeh.models import ColumnDataSource

TOOLS = "tap,reset"
p = figure(title="Some Figure", tools=TOOLS)

source = ColumnDataSource(dict(x=[[1, 3, 2], [3, 4, 6, 6]],
                y=[[2, 1, 4], [4, 7, 8, 5]], name=['A', 'B']))

pglyph = p.patches('x', 'y', source=source)

def callback(attr, old, new):
    # The index of the selected glyph is : new['1d']['indices'][0]
    print("In callback")
    patch_name =  source.data['name'][new['1d']['indices'][0]]
    print("TapTool callback executed on Patch {}".format(patch_name))

pglyph.data_source.on_change('selected',callback)

curdoc().add_root(column(p))

当我加载页面并单击多边形时,我没有看到回调被执行。

缺少什么?

那是因为 selected 属性值没有改变。包含的对象被更改,Bokeh 不会检测到深度更改。

尝试将回调函数和下一行替换为:

def callback(attr, old, new):
    print("In callback")
    patch_name = source.data['name'][new[0]]
    print("TapTool callback executed on Patch {}".format(patch_name))


pglyph.data_source.selected.on_change('indices', callback)