如何在bokeh中更新customJS函数中的全局python变量?

如何在bokeh中更新customJS函数中的全局python变量?,python,variables,callback,slider,Python,Variables,Callback,Slider,在下面的示例中,当滑块移动时,如何更新python变量extern\u python\u variable?extern\u python\u变量的值应始终为f(滑块的实际位置)。谢谢 从bokeh.io导入vform 从bokeh.models导入CustomJS、ColumnDataSource和Slider 从bokeh.plotting导入图形,输出_文件,显示 输出文件(“callback.html”) x=[x*0.005表示范围内的x(0200)] y=x 外部python变量=0

在下面的示例中,当滑块移动时,如何更新python变量
extern\u python\u variable
extern\u python\u变量
的值应始终为f(滑块的实际位置)。谢谢

从bokeh.io导入vform
从bokeh.models导入CustomJS、ColumnDataSource和Slider
从bokeh.plotting导入图形,输出_文件,显示
输出文件(“callback.html”)
x=[x*0.005表示范围内的x(0200)]
y=x
外部python变量=0
source=ColumnDataSource(数据=dict(x=x,y=y))
绘图=图形(绘图宽度=400,绘图高度=400)
绘图线('x','y',震源=震源,线宽=3,线α=0.6)
callback=CustomJS(args=dict(source=source),code=”“”
var data=source.get('data');
var f=cb_obj.get('值')
x=数据['x']
y=数据['y']
对于(i=0;i
我认为有三种方法可以满足您的需求:

1) 使用Bokeh服务器,您可以响应工具事件并与python中完成的计算同步。(见附件)

2) 如果仍然希望使用静态html页面,那么在工具事件之后,可以使用XMLHttpRequest(请参阅)将数据发送到服务器(可以是本地主机),然后服务器将等待服务器的响应。服务器可以使用CGI python脚本(请参阅)读取XMLHttpRequest发送的数据,并将一些值返回到发出请求的CustomJS


3) 第三种基本方法是打开一个空网页,并使用document.write函数将数据转储到其中(请参阅)。然后将数据复制并粘贴到python脚本或ipython笔记本中进行分析。

我喜欢bokeh嵌入式示例中脚本中提供的方法

CustomJS回调仅在浏览器中执行(不执行python代码)。看

例如,使用Bokeh服务器,您可以向代码中添加以下内容以获得python回调:

def update(attr, old, new):
    # your custom python code

slider = Slider(start=0.1, end=4, value=1, step=.1, title="power")
slider.on_change('value', update)

此代码的输出是一个html文件,其中包含用于交互机制的javascript。因此,它将在浏览器中运行,并在浏览器中运行javascript,而不会运行任何python例程。我想知道您打算如何处理extern\u python\u变量?如果要监视f的值,可以在浏览器中打开一个javascript控制台,并使用console.log(变量_to_monitor)将任何信息转储到那里;上面的代码应该只是一个简单的示例。实际上,我想在python变量中保存一个选择中的rect属性,我需要这些变量来进行进一步的面向数据库的计算,这在customJS函数中是无法完成的。太棒了!谢谢你,巴勃罗。我会用Bokeh服务器测试你的建议。
def update(attr, old, new):
    # your custom python code

slider = Slider(start=0.1, end=4, value=1, step=.1, title="power")
slider.on_change('value', update)