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

Bokeh widgets call CustomJS and Python callback for single event?

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

在这种情况下,Python 回调可能是 long-运行,我想在 long-[ 之前和之后启动和停止一个 Javascript 微调器对象=21=] Python 代码执行。

从 Bokeh 1.0.4 开始,"busy" / "done" 事件(启用触发微调器或其他 UI 事件)仍然是一个开放的功能请求。

与此同时,最好的办法是使用一些 "dummy" 模型来触发 CustomJS 回调。例如,您可以添加一个不可见的字形,并在其上触发一个 CustomJS any 属性 作为 "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))