Bokeh ColumnDataSource的on_change事件的旧参数和新参数具有相同的值

问题描述 投票:0回答:1

我有一个ColumnDataSource来描述DataTable的数据,我希望有一个事件可以在我编辑DataTable中的单元格时执行某些操作。我在ColumnDataSource的data属性上设置了事件,我希望得到属性的旧值和新值之间的差异。

问题是两个值都是相同的。编辑表格单元格后,如何获取新值和旧值?

我的代码:

from bokeh.models import ColumnDataSource, DataTable, TableColumn, StringEditor
from bokeh.plotting import figure, curdoc
from bokeh.layouts import column


def cluster_name_changed(attr, old, new):
    print(old)
    print(new)

cluster_field = 'CLUSTER'
table_clusters_source = ColumnDataSource(data=dict(cluster_no=[1, 2, 3]))

columns_clusters = [TableColumn(field='cluster_no',
                                title="Cluster Name",
                                editor=StringEditor())]

table_clusters = DataTable(source=table_clusters_source,
                           columns=columns_clusters,
                           width=300,
                           height=200,
                           editable=True)

table_clusters_source.on_change('data', cluster_name_changed)

curdoc().add_root(column(table_clusters))

输出是(当我将第三个单元格从“3”更新为“第三个”时):

{'cluster_no': [1, 2, 'third']}
{'cluster_no': [1, 2, 'third']}
python bokeh
1个回答
1
投票

oldnew参数适用于简单的标量属性(即其值为数字,字符串,颜色等)。但是它们不能与ColumnDataSource一起工作,这是一个已知且有记录的限制(因为我没有随便的参考)。原因是为ColumnDataSource制作oldnew函数会使事情变得非常缓慢并且会破坏内存使用。

© www.soinside.com 2019 - 2024. All rights reserved.