栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获取Bokeh小部件事件和属性的列表(可用于触发Python回调)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获取Bokeh小部件事件和属性的列表(可用于触发Python回调)

该答案是针对Bokeh v1.0.4给出的,可能与最新文档不兼容

Javascript回调和Python回调是Bokeh中非常强大的工具,可以附加到任何Bokeh模型元素。另外,您可以通过使用Typescript编写自己的扩展来扩展Bokeh功能(最终编译为JS)

可以使用以下两种方法之一添加JS回调:

Model.js_on_event('event', callback)Model.js_on_change('attr', callback)

Python回调主要用于小部件:

Widget.on_event('event, onevent_handler)Widget.on_change('attr', onchange_handler)Widget.on_click(onclick_handler)

每个小部件的事件处理程序的确切函数签名可以是:

onevent_handler(event)onchange_handler(attr, old, new) onclick_handler(new)onclick_handler()

attr
可以是任何部件类(或它的基类)属性。因此,您始终需要查阅Bokeh参考页。还扩大了JSON原型有助于找出哪些属性的支持如寻找事业部,我们不能直接看到
id
name
style
text
属性,这来源于其基类。但是,所有这些属性都存在于Div的JSON原型中,因此受Div支持:

{  "css_classes": [],  "disabled": false,  "height": null,  "id": "32025",  "js_event_callbacks": {},  "js_property_callbacks": {},  "name": null,  "render_as_text": false,  "sizing_mode": "fixed",  "style": {},  "subscribed_events": [],  "tags": [],  "text": "",  "width": null}

回到您的问题:很多时候,您可以使用不同的方法获得相同的结果。

据我所知,没有一种很好的方法可以列出每个小部件的所有受支持的事件,但是阅读文档和深入研究基类会大有帮助。

使用上述方法,可以检查可以在回调中使用的 窗口小部件属性 。当涉及到 事件时,
我建议您

bokeh.events
在IDE中查看和探索该类。您可以在其中找到每个事件的扩展说明。随着程序员的直觉选择小部件支持的正确事件,随着时间的流逝自然会自然而然地发生(因此,没有理由
button_click
Plot
也没有
pan
事件,
Button
只有相反的方式)。

决定将回调附加到哪个小部件(模型元素)以及要选择哪种方法或将回调绑定到哪个事件,这主要取决于您: 哪个用户操作应触发您的回调?

因此,您可以将JS回调附加到任何小部件(值更改,滑块移动等),任何工具(TapTool,HoverTool等),data_source(单击字形),绘制画布(例如单击)在字形以外的区域)或绘图范围(缩放或平移事件)等。

基本上,您需要了解所有Python对象在BokehJS中都有它们的等效项,因此您可以在两个域中以相同的方式使用它们(当然,在语法上有所不同)。

例如,该文档显示ColumnDataSource具有“
selected”属性,因此对于点,您可以检查

source.selected.indices
并查看选择了绘图上的哪个点或在您的情况下喜欢:选择了哪些表行。您可以在Python中以及在浏览器中的代码中设置断点,并检查Python或BokehJS数据结构。在运行代码时,将环境变量
BOKEH_MINIFIED
设置
no
为在IDE(运行配置)或终端(例如
BOKEH_MINIFIED=nopython3 main.py
)中设置。这将使在浏览器中调试BokehJS更加容易。

这是您的代码(由于未安装Jupiter Notebook,因此对“ pure Bokeh” v1.0.4做了一些修改)

from bokeh.layouts import columnfrom bokeh.models import ColumnDataSource, DataTable, TableColumnfrom bokeh.plotting import figure, curdocfrom bokeh.io import show, output_notebookfrom bokeh.sampledata.sea_surface_temperature import sea_surface_temperature# output_notebook()def modify_doc(doc):    df = sea_surface_temperature.copy()    source = ColumnDataSource(data = df)    source_table = ColumnDataSource(data = {"alpha": [s for s in "abcdefgh"],"num": list(range(8))})    plot = figure(x_axis_type = 'datetime', y_range = (0, 25),       y_axis_label = 'Temperature (Celsius)',       title = "Sea Surface Temperature at 43.18, -70.43")    plot.line('time', 'temperature', source = source)    def callback(attr, old, new):  # here new is an array containing selected rows        if new == 0: data = df        else: data = df.rolling('{0}D'.format(new[0])).mean()  # asuming one row is selected        source.data = ColumnDataSource(data = data).data    table = DataTable(source = source_table,columns = [TableColumn(field = "alpha", title = "Alpha"),TableColumn(field = "num", title = "Num")])    source_table.selected.on_change('indices', callback)    doc().add_root(column(table, plot))modify_doc(curdoc)# show(modify_doc)

结果:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号