我有一个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']}
答案 0 :(得分:1)
old
和new
参数通过简单的标量属性(即,其值为数字,字符串,颜色等)可以很好地工作。但是,它们不能与ColumnDataSource一起使用,这是一个已知且有据可查的限制(因此我没有参考资料)。原因是对ColumnDataSource使用old
和new
函数会使事情变得异常缓慢,并导致内存使用爆炸。