如何在散景 python 中捕获下拉小部件的值?

How to capture value of dropdown widget in bokeh python?

link 中 bokeh 0.12.1 的官方文档给出了以下用于创建下拉菜单的代码。

http://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html#userguide-interaction-widgets

但它没有明确提及当有人单击并select从下拉列表中获取值时如何捕获下拉小部件的值。

from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown

output_file("dropdown.html")

menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)

show(widgetbox(dropdown))

问题

看到有 2 个方法称为 on_click() 和 on_change() 但从文档中无法弄清楚如何捕获值。 我们如何将 selected 值分配给新变量?

编辑

根据@Ascurion 的输入,我更新了我的代码,如下所示。但是当我 select 下拉列表中的值时,Spyder 的 ipython 控制台中不会打印任何内容。 请指教

    from bokeh.io import output_file, show
    from bokeh.layouts import widgetbox
    from bokeh.models.widgets import Dropdown

    output_file("dropdown.html")


    menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
    dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)

    def function_to_call(attr, old, new):
        print dropdown.value

    dropdown.on_change('value', function_to_call)
    dropdown.on_click(function_to_call)
    show(widgetbox(dropdown))

编辑 此答案不再适用于散景版本 2.X.X。请参阅下面的评论和其他答案。

如果您设置 on_change 例如如下:

dropdown.on_change('value', function_to_call)

可以按如下方式访问 function_to_call 中所选项目的值:

def function_to_call(attr, old, new):
    print dropdown.value

要使此功能正常工作,必须在 function_to_call 之前定义下拉列表。

可以在页面顶部找到有关如何使用 on_click 和 on_change(bokeh 版本 12.1)访问小部件中设置的值的文档:

http://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html

编辑

要获得交互式反馈,您必须在服务器模式下 运行 散景,以便在与小部件交互时可以评估 python 代码。我稍微更改了您的示例以允许 运行 与

bokeh serve --show file_name.py

命令。下面的代码然后在终端中打印出所选项目。

from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
from bokeh.plotting import curdoc

menu = [("Quaterly", "time_windows"), ("Half Yearly", "time_windows"), None, ("Yearly", "time_windows")]
dropdown = Dropdown(label="Time Period", button_type="warning", menu=menu)

def function_to_call(attr, old, new):
    print dropdown.value

dropdown.on_change('value', function_to_call)

curdoc().add_root(dropdown)

查看此处了解更多信息:

http://docs.bokeh.org/en/latest/docs/user_guide/server.html

在 Bokeh 2.0.0 中,Dropdown.value 已被删除。获取点击的项目的正确方法是:

from bokeh.models import Dropdown

d = Dropdown(label='Click me', menu=['a', 'b', 'c'])


def handler(event):
    print(event.item)


d.on_click(handler)