我目前正在开发一个基于烧瓶的web应用程序,我将生成的图形嵌入到单独的bokeh服务器上,运行bokeh应用程序与烧瓶应用程序在同一台机器上。( bokeh服务器是与烧瓶服务器不同的进程)
在烧瓶中,我访问/加载bokeh会话
session = pull_session(session_id=None, url='http://mybokehserver:5000/mybokeh')
script = server_session(session_id=session.id, url='http://mybokehserver:5000/mybokeh')典型
return render_template('flask.html', title='Slider example in flask', form=form, script=script )然后,在烧瓶中呈现页面。
这成功地显示了我的烧瓶页面中的bokeh团队的滑块示例。滑块工作正常,因此回调按预期运行。因此,在我对bokeh术语的理解中,烧瓶服务器是一个"bokeh客户机“。
现在的问题是,我如何从bokeh小部件中访问属性,比如提交表单后在烧瓶服务器应用程序中使用的滑块的值。
我已经搜索了好几天了,包括bokeh文档,但是我找不到一个例子,或者至少当我看到它的时候我没有认出它。有人能给我指明正确的方向吗?
发布于 2018-12-04 21:25:50
再过几天,我就找到了完成所需任务的pythonic (或bokehonic)方法:解决方案是在bokeh服务器端“给对象命名”。并在客户端声明对这些对象by_name的访问。
简化的服务器端示例如下:
from bokeh.plotting import figure, curdoc
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource
import numpy as np
x = np.zeros(2)
y = np.zeros(2)
v_src = ColumnDataSource(data=dict(x=x, y=y))
fig_v = figure(plot_width=600, plot_height=300)
fig_v.y_range.name = "y_range_v" # *** giving a name
fig_v.line('x','y',source=v_src, line_width=2,name="voltage") # *** giving a name
plot = gridplot([[fig_v],], toolbar_location='above')
curdoc().add_root(plot) 例如,现在我可以通过(烧瓶)客户端的拉出会话访问fig_v.line对象及其属性和/或fig_v.yrange对象,并修改它,如下所示:
with pull_session(session_id=None, url='http://192.168.3.1:5000/bk_serv') as session:
script = server_session(session_id=session.id,url='http://192.168.3.1:5000/bk_serv')
doc = session.document
line = doc.get_model_by_name("voltage") # *** access via name
line.data_source.data = dict(x=np.arange(len(some_x_data)), y=some_y_data)
yrange = doc.get_model_by_name("y_range_v") # *** access via name
yrange.start=min_somedata
yrange.end = max_somedata
return render_template('flask.html', form=form, script=script) 我不确定细节,但由bokeh创建的web套接字连接负责情节的更新。
注意:上面的代码是我编写的代码的摘录。它可能不会按原样运行,但我不能发布整个作品,这篇摘录给出了重要的信息。
https://stackoverflow.com/questions/53547295
复制相似问题