Bokeh小部件为单个事件调用CustomJS和Python回调?

时间:2017-05-27 02:08:55

标签: javascript python bokeh

我有一个Bokeh应用程序,它利用各种小部件事件的Python回调。对于某些事件,我想在回调Python函数之前执行一些JavaScript代码。这可能吗?

在这种情况下,Python回调可能会长时间运行,并且我想在长时间运行的Python代码执行之前和之后启动和停止Javascript微调器对象。

1 个答案:

答案 0 :(得分:8)

截至Bokeh 1.0.4,"忙碌" /"完成"事件(用于启用触发微调器或其他UI事件)仍然是一个开放的功能请求。

与此同时,您最好的选择是使用一些"虚拟"模型以触发CustomJS回调。例如,您可以添加一个不可见的字形,并在其上触发CustomJS任何属性作为" busy"的代理。事件。这很笨重,但很有用。

这是一个非常粗略的大纲示例。第一个警报会立即弹出。关闭它,5秒后会弹出下一个警报。

import time

from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import Button, CustomJS
from bokeh.plotting import figure

p = figure()
p.circle([1,2,3,4,5], [2,6,3,1,6])

dummy = p.circle([1], [2], alpha=0)
dummy.glyph.js_on_change('size', CustomJS(code="""
alert(cb_obj.size.value)
"""))

b = Button()
def cb():
    dummy.glyph.size = 10
    time.sleep(5)
    dummy.glyph.size = 20

b.on_click(cb)

curdoc().add_root(column(b, p))