2017-01-11 17 views
9

我想以編程方式更改DataTable對象的行選擇(沒有JS,只是python)。我試圖如此使用底層ColumnsSource的selected屬性,但沒有成功。如何才能做到這一點?散景:DataTable - 如何設置選定的行

+0

我知道這是不是一個完整的答案的。我基本上正在嘗試做同樣的事情。我的經驗目前如此。從Python中,我可以設置ds.selected ['1d'] ['indices'] = [選定索引列表],但這不會傳播到前端。相反,當我以類似的方式通過js設置索引時,我可以獲取數據表以選擇行。但不知何故,這些變化 - 儘管「被證實」 - 不會註冊。因此,如果有像以下這樣的事件偵聽器:ds.onchange('selected',....),那麼所選屬性的這些更改將無法識別。我正在考慮提交一個錯誤。 – Thornhale

+1

你在問什麼,我是/正試圖在這裏找到答案:https://stackoverflow.com/questions/44960975/how-do-i-pre-select-rows-in-a-bokeh-widget -datatable。 – Thornhale

+0

這是在散景應用程序或筆記本? – mattjegan

回答

2

查看示例應用程序(需要散景運行)按下按鈕更改所選行,然後更新表格和繪圖。這是你需要的所有功能嗎?通過這種方式,你可以在JS中做,而不需要使用散景服務器,但如果你有更多的Python功能,那麼我想你需要它。

from datetime import date 
from random import randint 

from bokeh.io import output_file, show, curdoc 
from bokeh.plotting import figure 
from bokeh.layouts import widgetbox, row 
from bokeh.models import ColumnDataSource 
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn,Button 

output_file("data_table.html") 

data = dict(
     dates=[date(2014, 3, i+1) for i in range(10)], 
     downloads=[randint(0, 100) for i in range(10)], 
    ) 

def update(): 
    #set inds to be selected 
    inds = [1,2,3,4] 
    source.selected = {'0d': {'glyph': None, 'indices': []}, 
           '1d': {'indices': inds}, '2d': {}} 
    # set plot data 
    plot_dates = [data['dates'][i] for i in inds] 
    plot_downloads = [data['downloads'][i] for i in inds] 
    plot_source.data['dates'] = plot_dates 
    plot_source.data['downloads'] = plot_downloads 


source = ColumnDataSource(data) 
plot_source = ColumnDataSource({'dates':[],'downloads':[]}) 


table_button = Button(label="Press to set", button_type="success") 
table_button.on_click(update) 
columns = [ 
     TableColumn(field="dates", title="Date", formatter=DateFormatter()), 
     TableColumn(field="downloads", title="Downloads"), 
    ] 
data_table = DataTable(source=source, columns=columns, width=400, height=280) 

p = figure(plot_width=400, plot_height=400) 

# add a circle renderer with a size, color, and alpha 
p.circle('dates','downloads',source=plot_source, size=20, color="navy", alpha=0.5) 


curdoc().add_root(row([table_button,data_table,p])) 
+0

它看起來像使選擇棒的關鍵是這條線,整個選定的對象需要更新。我需要在我自己的應用程序中進行驗證。但是像上面那樣運行應用程序可以正確選擇事物。是的,你是對的,我需要做的其他事情需要一個應用程序,而不僅僅是js。 – Thornhale

+1

是的,你需要更換整個對象,我認爲這可能是由於嵌套的級別而未檢測到更改。 – Anthonydouc

0

只是爲了清楚起見,您必須完全替換source.selected屬性才能觸發更改。因此,重要的路線是:

source.selected = {'0d': {'glyph': None, 'indices': []}, 
          '1d': {'indices': inds}, '2d': {}} 

單獨設置在source.selected的項目不起作用

source.selected['1d']['indices'] = inds # Doesn't work 
相關問題