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))
我有一个 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))