我正在使用Bokeh的单选按钮。我希望能够在单击单选按钮时显示一个加载指示器,然后在python回调完成后显示它已完成。您如何用Bokeh做到这一点?
我已经尝试将js_onchange和onchange组合用于单选按钮。我只是想不出一种方法来在Python回调完成后通知JS方面。
callback = CustomJS(args={}, code="""
document.getElementById('message_display').innerHTML = 'loading...';
""")
radio_button.js_on_change('active', callback)
radio_button.on_change('active', some_other_callback)
当我运行它时,将innerHTML设置为加载,并运行on_change Python回调并更新图,但我无法触发JS方面的更改,因为将innerHTML更改为已完成。
答案 0 :(得分:0)
假设用户已经查看了一个绘图,一个选择是在绘图范围的start
属性上设置一个回调,以便在更新绘图时触发该回调。
from bokeh.models import CustomJS
p = figure()
def python_callback()
p.y_range = Range1d(None, None)
# get your data here and update the plot
code = "document.getElementById('message_display').innerHTML = 'loading finished';"
callback = CustomJS(args = dict(), code = code)
p.y_range.js_on_change('start', callback)
请参见下面的工作示例:
import numpy as np
from bokeh.plotting import figure, show
from bokeh.models import CustomJS, ColumnDataSource
points = np.random.rand(50, 2)
cds = ColumnDataSource(data = dict(x = points[:, 0], y = points[:, 1]))
p = figure(x_range = (0, 1), y_range = (0, 1))
p.scatter(x = 'x', y = 'y', source = cds)
cb_to_make_selection = CustomJS(args = {'cds': cds}, code = """
function getRandomInt(max){return Math.floor(Math.random() * Math.floor(max));}
cds.selected.indices = [getRandomInt(cds.get_length()-1)]
""")
p.x_range.js_on_change('start', cb_to_make_selection)
show(p)