2016-11-08 88 views
1

我想在具有自動完成功能的jupyter筆記本中使用文本輸入小部件。因此我使用bokeh.models.widgets.inputsAutocompleteInput()從jupyter筆記本中的散景小部件訪問數據

from bokeh.models.widgets.inputs import AutocompleteInput 
from bokeh.io import output_notebook 
from bokeh.plotting import show 

output_notebook() 

txt_input = AutocompleteInput(completions=['val1', 'val2']) 
show(txt_input) 

Displaying the widget and autocompletion works fine,但是如何在更改時訪問輸入小部件的值? txt_input.value只返回默認值(一個空字符串)。

回答

1

從散景0.12.3開始,Jupyter筆記本中Bokeh小部件的更完整集成是still an open issue

但是,有一些解決方法,雖然他們可能被認爲有點笨重。這裏是一個CustomJS回調可以通到,將設置一個Python值的值小部件:

from bokeh.models import CustomJS 

callback = CustomJS(code=""" 
if (IPython.notebook.kernel !== undefined) { 
    var kernel = IPython.notebook.kernel; 
    cmd = "widget_value = '" + cb_obj.value + "'"; 
    kernel.execute(cmd, {}, {}); 
} 
""") 

結果是這樣的:

enter image description here


cmd的價值CustomJS代碼中的變量是將在當前運行的Jupyter內核中執行的python代碼的字符串。如果你需要調用一些python函數,例如,你也可以這樣做。

+0

不錯的破解!我可能值得注意的是,需要執行'from bokeh.models import CustomJS'另外 – joergd

+0

我在代碼中添加了答案 – bigreddot