2017-10-23 15 views
0

bokehのCheckboxButtonGroupのボタンオブジェクトをループする方法はありますか?Bokeh:CheckboxButtonGroupをループする方法

グループ内の各ボタンをループし、そのラベルに応じて異なるon_clickハンドラを割り当てたいとします。私はのようなものを想定した

for button in checkbox_button_group: button.on_click(someHandlerFunc)

しかし、明らかにCheckboxButtonGroupオブジェクトが反復可能ではありません。ドキュメントを見ると、グループ内の実際のボタンオブジェクトを返す属性を見つけることができません。私はactive属性とlabelsを参照してくださいが、それは私が欲しいものではないように見えます。 (https://bokeh.pydata.org/en/latest/docs/reference/models/widgets.groups.html#bokeh.models.widgets.groups.AbstractGroup

答えて

1

checkboxgroupコールバックで、アクティブなボタンのインデックスまたはラベルを取得するだけです。次に、if/elif/elseステートメントのチェーンを実行して、各ボタンに関連付ける機能を呼び出します。

EDIT:ここは、ボタングループでいくつかの簡単なものです:

は、ちょうど最後のボタンで何かをボタン経由

from bokeh.io import curdoc 
from bokeh.models import CheckboxButtonGroup 

a = CheckboxButtonGroup(labels=list('012'),active=[]) 

def stuff_0(in_active): 
    if in_active: 
     print 'do stuff' 
    else: 
     print 'undo stuff' 
def stuff_1(in_active): 
    if in_active: 
     print 'yes' 
    else: 
     print 'no' 
def stuff_2(in_active): 
    if in_active: 
     print 'banana' 
    else: 
     print 'apple' 

stuff_list = [stuff_0,stuff_1,stuff_2] 

def do_stuff(attr,old,new): 
    print attr,old,new 

    last_clicked_ID = list(set(old)^set(new))[0] # [0] since there will always be just one different element at a time 
    print 'last button clicked:', a.labels[last_clicked_ID] 
    last_clicked_button_stuff = stuff_list[last_clicked_ID] 
    in_active = last_clicked_ID in new 
    last_clicked_button_stuff(in_active) 

a.on_change('active',do_stuff) 

curdoc().add_root(a) 

それともできるループをクリックし、すべてで何かを行うにはボタンをクリックするたびにボタンが表示されます:

def do_stuff(attr,old,new): 
    print attr,old,new 

    for i in [0,1,2]: 
     stuff = stuff_list[i] 
     in_active = i in new 
     stuff(in_active) 
+0

checkboxgroupコールバックとは、 'callback'属性のことですCustomJSオブジェクトを作成しますか?)これを行うには、checkboxgroupオブジェクトに設定した 'on_click'関数で行います(' on_click'関数内でクリックされた個々のボタンの参照方法を知ることができませんでした)。 – hhprogram

+0

@hhprogram編集を参照してください、CheckboxButtonGroupでon_clickイベントは必要ありません。それらは実際のボタンではなく、ボタンとして表示されるチェックボックスのリストです。ちょうど1つのボケモデルです。チェックされたボックス/クリックされたボタンのリストの変更のみで対話できます。 – Seb