我希望在更改表中相应的sin(x)
值后立即更改x
值。 (在运行此代码之前在CMD中启动bokeh serve
)
from bokeh.client import push_session
from bokeh.io import curdoc
from bokeh.layouts import row
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn
import math
curdoc().clear()
x=[i for i in range(10)]
def update_y(x):
y=[]
for i in x:
y.append(round(math.sin(int(i)),2))
return y
y=update_y(x)
data=dict(x=x,y=y)
source=ColumnDataSource(data)
columns = [ TableColumn(field='x',title="x"),TableColumn(field='y',title="sin(x)") ]
dadat= DataTable(source=source, columns=columns, width=600, height=400,editable=True)
def update(attr,new,old):
print('1')
y=update_y(old['x'])
print('2')
source.data=dict(x=x,y=y)
print('3')
source.on_change('data',update)
curdoc().add_root(row(dadat))
ses=push_session(curdoc())
ses.show()
ses.loop_until_closed()
运行此代码并更改x
的值后,它会将值更改为小数秒,然后返回并进入无限循环。
我认为它是因为source.on_change
,因为在update
函数内编辑源值时可能会触发它。有没有办法解决这个问题?