首页 文章

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

提问于
浏览
3

链接中的散景0.12.1的官方文档提供了以下用于创建下拉列表的代码 .

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

但是,当有人点击并从下拉列表中选择一个值时,它没有明确提到如何捕获下拉窗口小部件的值 .

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))

Question

是看到有2个方法叫做on_click()&on_change()但是从文档中无法弄清楚如何捕获值 . 我们如何将选定的值分配给新变量?

EDIT

基于@Ascurion的输入,我更新了我的代码,如下所示 . 但是当我在下拉列表中选择一个值时,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))

1 回答

  • 4

    如果您设置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(散景版本12.1)访问窗口小部件中设置的值的文档可以在页面顶部找到:

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

    EDIT

    要获得交互式反馈,您必须在服务器模式下运行散景,以便在与窗口小部件交互时可以评估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://bokeh.pydata.org/en/latest/docs/user_guide/server.html

相关问题