【问题标题】:Python Bokeh: Timeout for callbacks in case of sliders with rangePython Bokeh:如果滑块有范围,则回调超时
【发布时间】:2018-04-01 11:40:48
【问题描述】:

目前,我有一个 DateRangeSlider。我想记录滑块下限和上限的变化。我遇到了一个解释“mouseup”回调策略的答案。但是,这会将更改限制为一次只能更改一个滑块。因此,我想在读取更改的值之前等待一段时间,以便记录新的下限和上限。如何实现?

以下代码一次更改下限或上限。

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-05-05 2017-07-22

回调

2017-05-26 2017-07-22

而且,这就是我想要实现的目标:

回调

2017-05-05 2017-07-22

【问题讨论】:

    标签: python callback bokeh rangeslider


    【解决方案1】:

    Bokeh 回调会在更改发生时立即执行,因此实际上没有任何好的方法可以通过范围本身的回调来完成您想要的操作(它们总是会为更改为不同的滑块句柄而独立触发)。我可以建议的最好的事情是在滑块上进行回调,而是有一个“更新”按钮,它有一个使用滑块值的回调,当它们准备好应用更改时可以按下。

    【讨论】:

      【解决方案2】:

      您可以存储范围滑块的值,并让回调仅在两个值与存储的值不同时才执行操作,然后使用新值更新存储的值。

      与 bigreddot 建议的按钮相比,这样做的缺点是每次要选择新范围时都需要更改这两个值。好处是您不需要按钮。

      【讨论】:

        【解决方案3】:

        我创建了一个delay function 以不立即应用滑块更改。

        它会等待一个特定的时间,直到它执行第一个调用。 每次新调用都会重置计数器。

        也许这也可以帮助您(或有类似问题的人)。

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 2018-10-16
          • 2020-06-28
          • 2011-12-12
          • 2020-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多