0
Select
ウィジェットを使用して私のDataTable
ウィジェットの値を更新するにはどうすればよいですか?ここで は私のサンプルコードです:selectable=False
場合Python bokeh CustomJSコールバックの更新DataTableウィジェット
import pandas as pd
from bokeh.io import show
from bokeh.layout import column
from bokeh.models import ColumnDataSource, CustomJS, Select
from bokeh.models.widgets import DataTable, TableColumn
df = pd.DataFrame({'a': range(10,50), 'b': range(110,150)})
source_foo = ColumnDataSource(data=df.loc[df['a'] < 25])
source_bar = ColumnDataSource(data=df.loc[df['a'] > 25])
source_fill = ColumnDataSource(data=df.loc[df['a'] < 25])
table_columns = [TableColumn(field=i, title=i) for i in ['a', 'b']]
select = Select(title='Selected value:', value='foo', options=['foo', 'bar'])
update = CustomJS(args=dict(source_fill=source_fill, source_foo=source_foo,
source_bar=source_bar), code="""
var data_foo = source_foo.data;
var data_bar = source_bar.data;
var data_fill = source_fill.data;
var f = cb_obj.value;
var list = ['a', 'b']
if (f == 'foo') {
for(var i = 0, size = list.length; i < size ; i++) {
var e = list[i];
delete data_fill[e];
data_fill[e] = data_foo[e];
}
}
if (f == 'bar') {
for(var i = 0, size = list.length; i < size ; i++) {
var e = list[i];
delete data_fill[e];
data_fill[e] = data_bar[e];
}
}
source_fill.change.emit();
""")
select.js_on_change('value', update)
data_table = DataTable(source=source_fill, columns=table_columns, width=150,
height=300, row_headers=False, selectable=False)
layout = column(select, data_table)
bio.show(layout)
データ値が変更されていません。 selectable=True
と設定すると、最初の行がリフレッシュされます。 DataTable
(selectable
に関係なく)のいずれかの列を並べ替えると、値が更新されます。リフレッシュは自動的にどのように強制されますか?
ありがとうございました!
はどうもありがとうございました!!!!それは完全に動作します!私は 'if(f == 'foo'){data_fill = data_foo} ...を試しましたが、どちらもうまくいきませんでした。 – ragesz