Python Bokeh 基于 python 对象添加警报

Python Bokeh add an alert based on a python object

我正在做一个 Bokeh 页面,我在 Python 中做了一些计算,有时计算会崩溃,我想使用“警报”浏览器弹出窗口让用户知道他们添加了一些错误数据.我使用 this example 并添加了一个 Radiobuttongroup,我只想在 RadioButton 设置为 Make alert 时提醒用户。 (我正在寻找通用的“python 解决方案”)。

from bokeh.io import curdoc
from bokeh.models.widgets import Button, RadioButtonGroup
from bokeh.layouts import column
from bokeh.models.callbacks import CustomJS

button_classify = Button(label="Create Pop-up alert")
callback = CustomJS(args={}, code='alert("hello!");')
callback2 = CustomJS(args={}, code='')
button_group = RadioButtonGroup(labels=['Make alert', 'Dont make an alert'],
                                active=0)

def determine_button() -> CustomJS:
    if button_group.active == 0:
        return callback
    else:
        return callback2

button_classify.js_on_click(determine_button)
layout = column(button_group,
                button_classify)
curdoc().add_root(layout)
curdoc().title = "Pop-up Alert"

在您的代码中,您将 JS 回调与 Python 回调混合在一起。您不能将 CustomJS 回调传递给 Python 回调。请参阅下面更正的代码。 如果您想 运行 它作为服务器应用程序,只需注释 show(layout) 并取消注释底部的其他两行,然后 运行 使用 bokeh serve --show myapp.py。代码适用于 Bokeh v2.1.1

from bokeh.io import curdoc, show
from bokeh.models.widgets import Button, RadioButtonGroup
from bokeh.layouts import column
from bokeh.models.callbacks import CustomJS

button_classify = Button(label="Create Pop-up alert")
button_group = RadioButtonGroup(labels=['Alert ON', 'Alert OFF'], active=0)

code = 'if (button_group.active == 0) { alert("ALERT !"); }'
button_classify.js_on_click(CustomJS(args={'button_group': button_group}, code=code))
layout = column(button_group, button_classify)

show(layout)

# curdoc().add_root(layout)
# curdoc().title = "Pop-up Alert"