2017-11-27 53 views
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と設定すると、最初の行がリフレッシュされます。 DataTableselectableに関係なく)のいずれかの列を並べ替えると、値が更新されます。リフレッシュは自動的にどのように強制されますか?

ありがとうございました!

答えて

2

あなただけの新しいデータへのポインタsource_fill.dataを行うことができます。

if (f == 'foo') { source_fill.data = source_foo.data; } if (f == 'bar') { source_fill.data = source_bar.data; }

+0

はどうもありがとうございました!!!!それは完全に動作します!私は 'if(f == 'foo'){data_fill = data_foo} ...を試しましたが、どちらもうまくいきませんでした。 – ragesz

関連する問題