【问题标题】:Bokeh widget callback to select all checkboxes散景小部件回调以选择所有复选框
【发布时间】:2017-01-26 10:58:48
【问题描述】:

我在尝试设置 Bokeh CheckboxGroup 小部件时遇到了几个问题。它本身的复选框组很大(50 个状态),我想将选择初始化为所有活动。

此外(更重要的是)由于该组旨在进行高度交互,因此我想为“全选”和“全部清除”添加按钮。我知道我需要一些回调机制来执行此操作,但是在搜索示例、文档和 stackoverflow 之后,无法弄清楚如何。我在下面包含了我的代码的简化版本。我的偏好是使用标准的小部件回调而不是 JS 回调。

任何帮助表示赞赏!

from bokeh.plotting import curdoc, output_file
from bokeh.models.widgets import Button, CheckboxGroup
from bokeh.layouts import widgetbox, row
from bokeh.models import ColumnDataSource, Callback 

output_file("states.html", title="states")

states = ["Alabama", "Alaska ", "Arizona", "Arkansas", "California", \
        "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", \
        "Hawaii", "Idaho ", "Illinois", "Indiana", "Iowa", "Kansas", \
        "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", \
        "Michigan ", "Minnesota", "Mississippi", "Missouri", "Montana",\
        "Nebraska", "Nevada ", "New Hampshire", "New Jersey",\
        "New Mexico", "New York", "North Carolina", "North Dakota", \
        "Ohio", "Oklahoma","Oregon", "Pennsylvania", "Rhode Island", \
        "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",\
        "Vermont", "Virginia","Washington", "West Virginia", \
        "Wisconsin", "Wyoming"]

states = CheckboxGroup(
        labels = states,
        active=[0,1])

select_all = Button(label="select all")
# need some help here

group = widgetbox(select_all, states)

layout = row(group)

curdoc().add_root(layout)
curdoc().title = "states"

【问题讨论】:

    标签: python bokeh


    【解决方案1】:

    Bokeh 服务器的基本功能是在 Python 和 JS 端保持所有 Bokeh 对象同步。 CheckboxGroupactive 属性指定始终检查哪些框,而不仅仅是初始化。所以要勾选所有的复选框,你只需要在回调中适当地设置它:

    from bokeh.plotting import curdoc, output_file
    from bokeh.models.widgets import Button, CheckboxGroup
    from bokeh.layouts import widgetbox, row
    from bokeh.models import ColumnDataSource, Callback
    
    output_file("states.html", title="states")
    
    states_list = ["Alabama", "Alaska ", "Arizona", "Arkansas", "California", \
            "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", \
            "Hawaii", "Idaho ", "Illinois", "Indiana", "Iowa", "Kansas", \
            "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", \
            "Michigan ", "Minnesota", "Mississippi", "Missouri", "Montana",\
            "Nebraska", "Nevada ", "New Hampshire", "New Jersey",\
            "New Mexico", "New York", "North Carolina", "North Dakota", \
            "Ohio", "Oklahoma","Oregon", "Pennsylvania", "Rhode Island", \
            "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",\
            "Vermont", "Virginia","Washington", "West Virginia", \
            "Wisconsin", "Wyoming"]
    
    states = CheckboxGroup(
            labels = states_list,
            active=[0,1])
    
    select_all = Button(label="select all")
    
    def update():
        states.active = list(range(len(states_list)))
    select_all.on_click(update)
    
    group = widgetbox(select_all, states)
    
    layout = row(group)
    
    curdoc().add_root(layout)
    curdoc().title = "states"
    

    【讨论】:

    • 太棒了!如果您能将答案标记为正确,我们将不胜感激。
    • 我刚刚用0.12.5检查了它对我来说工作正常,如果你可以隔离一个存在问题的可重现环境,我会建议一个GH问题。
    • @bigreddot 我在 Python 2.7.12 上使用散景 0.12.5(在 Windows 10 上)。与您提供的代码完全相同。你用的是什么版本的 Python?
    • @bigreddot 另外,我在 Chrome 和 Firefox 上尝试过。 (哈!刚刚意识到您是 bokeh 存储库所有者 :))
    • OSX 上的 Py 3.6。我肯定会建议与此信息有关的 GH 问题,以免丢失或忘记。
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多