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

时间:2019-03-04 16:31:32

标签: python bokeh

我有一个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”更新为“ third”时):

{'cluster_no': [1, 2, 'third']}
{'cluster_no': [1, 2, 'third']}

1 个答案:

答案 0 :(得分:1)

oldnew参数通过简单的标量属性(即,其值为数字,字符串,颜色等)可以很好地工作。但是,它们不能与ColumnDataSource一起使用,这是一个已知且有据可查的限制(因此我没有参考资料)。原因是对ColumnDataSource使用oldnew函数会使事情变得异常缓慢,并导致内存使用爆炸。