散景-检查复选框与按钮/复选框回调

Bokeh - check checkboxes with a button/checkbox callback

本文关键字:复选框 回调 按钮 检查 散景      更新时间:2023-09-26

如何通过单击按钮或在散景中检查单独的复选框来检查CheckBoxGroup中的复选框?

我知道这个解决方案在javascript jquery检查取消选中所有复选框与一个按钮

然而,在customJS中传递的checkboxgroup bokeh对象不能被.prop操纵!另外,我不知道如何访问复选框组内的个人复选框。我不确定如何使用散景checkboxgroup对象。

这是我所尝试的,plot是一个包含不同散点图的列表:

checkbox = CheckboxGroup(labels=[str(i) for i in range(len(plots))],active=range(len(plots)),width=200)
iterable = [('p'+str(i),plots[i]) for i in range(len(plots))]+[('checkbox',checkbox)]
code = ''.join(['p'+str(i)+'.visible = '+str(i)+' not in checkbox.active;' for i in range(len(plots))])
checkbox.callback = CustomJS(args={key: value for key,value in iterable},lang="coffeescript", code=code)
checkbox2 = CheckboxGroup(labels=['check all'],active=[0],width=100)
checkbox2.callback = CustomJS(args={'checkbox':checkbox}, code = """
if (0 not in cb_obj.active){
    checkbox.set("active",_.range(27);
}
checkbox.trigger("change");
    """)

range(27) because len(plots)=27。我的第一个复选框组可以很好地触发图中绘图的可见性。但是第二个复选框不起作用

我改编了Bigreddot的答案来回答这个问题:Bokeh小部件回调选择所有复选框,从CustomJS回调中获得类似的效果。

假设在图形"plots"中有一个图表列表,下面是一个带有复选框的示例,该复选框触发行可见性:

N_plots = range(len(plots))
checkbox = CheckboxGroup(labels=[str(i) for i in N_plots],active=N_plots,width=200)
iterable = [('p'+str(i),plots[i]) for i in N_plots]+[('checkbox',checkbox)]
checkbox_code = ''.join(['p'+str(i)+'.visible = checkbox.active.includes('+str(i)+');' for i in N_plots])
checkbox.callback = CustomJS(args={key: value for key,value in iterable}, code=checkbox_code)

这是一个可以清除所有复选框的按钮:

clear_button = Button(label='Clear all')
clear_button_code = "checkbox.active=[];"+checkbox_code
clear_button.callback = CustomJS(args={key: value for key,value in iterable}, code=clear_button_code)

这里是一个按钮,检查所有的复选框:

check_button = Button(label='Check all')
check_button_code = "checkbox.active="+str(N_plots)+";"+checkbox_code
check_button.callback = CustomJS(args={key: value for key,value in iterable}, code=check_button_code)