2017-10-20 16 views
0
のスライダの場合のコールバックのタイムアウト

現在、私はDateRangeSliderを持っています。私は、スライダの下側範囲と上側範囲の両方の変化を記録したいと思います。私は 'mouseup' callback_policyについて説明した答えを見つけました。しかし、これは一度にスライダの1つに変更を制限します。ですから、変更した値を読み取る前にある程度の時間を待って、新しい低域と高域を記録できるようにしたいと思います。これはどのように達成できますか?Python Bokeh:範囲が

次のコードは、一度に下限範囲または上限範囲を変更します。サーバー上のスライダーの値を変更する際に

from datetime import date 

from bokeh.models.widgets import DateRangeSlider 
from bokeh.layouts import layout 
from bokeh.models import CustomJS 
from bokeh.models.sources import ColumnDataSource 

from bokeh.io import curdoc 

date_range_slider = DateRangeSlider(title="Date Range: ", start=date(2017, 1, 1), end=date.today(), value=(date(2017, 9, 7), date(2017, 10, 15)), step=1, callback_policy='mouseup') 


def cb(attr, old, new): 
    print "Callback" 
    print date_range_slider.value_as_datetime[0].strftime("%Y-%m-%d"), date_range_slider.value_as_datetime[1].strftime("%Y-%m-%d") 


source = ColumnDataSource(data=dict(value=[])) 
source.on_change('data', cb) 

date_range_slider.callback = CustomJS(args=dict(source=source), code=""" 
    source.data = { value: [cb_obj.value] } """) 

sizing_mode = 'fixed' 
l = layout(children=[[date_range_slider]],sizing_mode='fixed') 
curdoc().add_root(l) 
curdoc().title = "DateRangeSlider" 
curdoc().add_root(source) 

、私は次のような出力を得る:

コールバック

2017年5月5日2017年7月22日

コールバック

2017-05-262017-07-22

そして、これは私が達成したいものです。変更が起こるように

コールバック

2017年5月5日2017年7月22日

答えて

1

ボケのコールバックは、すぐに実行されています範囲内でコールバックを使用して必要なものを達成するための良い方法はありません(異なるスライダハンドルに変更された場合は常に独立して起動します)。私が提案することができる最も良いことは、スライダにコールバックをまったく持たせることですが、スライダ値を使用するコールバックを持つ「更新」ボタンがあり、変更を適用する準備ができたら使用することができます。

0

範囲スライダの値を格納し、両方の値が格納された値と異なる場合にのみコールバックを処理し、格納された値を新しい値で更新できます。

これを行うことの欠点は、新しい範囲を選択するたびに両方の値を変更する必要があるということです。あなたがボタンを必要としないことが有益です。

関連する問題