CustomJS.from_py_func(回调)效果不佳。 我可以显示图形和小部件,但我无法很好地处理回调函数。
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource
from bokeh.plotting import Figure, output_file, show
from bokeh.models.widgets import Button
reset_output()
#output_file("button.html",mode="inline")
output_notebook(resources=INLINE)
x = [x for x in range(0, 10)]
y = x
source = ColumnDataSource(data=dict(x=x, y=y))
def line_visible(arg):
if arg == 1: ll.visible = True
else: ll.visible = False
plot = Figure(plot_width=200, plot_height=200)
ll = plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)
line_visible(1) # visible = True: work well! line_visible(0) is OK, too.
def callback(source=source, window=None):
data = source.data
act = cb_obj.get('active') # 0:CHG,1:DSP,2:NOT
if 0 in act: # CHG work well
x, y = data['x'], data['y']
for i in range(len(x)):
x[i] = x[i]*1.1
y[i] = y[i]*2.0
if 1 in act: line_visible(1) # DSP: ?
if 2 in act: line_visible(0) # NOT:visible=False: don't work.
source.change.emit()
toggle1 = CheckboxButtonGroup(labels=["CHG","DSP","NOT"],
active=[], # all are not active: if active=[0,1,2], all are active
callback=CustomJS.from_py_func(callback)) #<= need Flexx(0.4.1)
layout = column(toggle1,plot)
show(layout)
我有一个新版本。 conda更新anaconda conda update --all 但是效果不好
答案 0 :(得分:1)
CustomJS.from_py_func()
接受一个你编写为python代码的函数,并将其作为PyScript转换为JavaScript。这是一个有趣的功能,因为它可以让您编写可以在浏览器中运行的类似Python的代码。但是,from_py_func()
生成的代码不是Python ,并且无法访问Python运行时环境。这意味着您的callback
函数无权访问line_visible
或ll
,因为它们是在python运行时中定义的,而不是在渲染绘图的浏览器和回调函数中定义的运行。
CustomJS()
回调允许您通过args
变量将变量从python环境传递到JavaScript代码中,但{{1}中似乎没有提供类似的功能}} 。这可以通过将变量作为默认参数(例如from_py_func()
)直接传递给回调函数来实现from_py_func()
回调。重要的是要注意,这只适用于Bokeh对象而不是常规Python对象。以下是我能够使用的source=source
的更新版本:
callback