2

函数如何监视 a 的值变化panel.widgets.IntSlider,但仅在释放鼠标时触发,而不是在拖动滑块时连续触发?

我已经尝试callback_policy='mouseup'并用 装饰了该功能@panel.depends(panel.widgets.IntSlider, watch=True),但是当滑块被拉动时,该功能会连续执行,而不仅仅是在释放鼠标按钮时。这是完整的代码:

import panel as pn


pn.extension()
int_slider = pn.widgets.IntSlider(
    name='Integer Slider', end=5, callback_policy='mouseup')

@pn.depends(int_slider.param.value, watch=True)
def print_slider_value(slider_value):
    return slider_value

pn.Column(int_slider, print_slider_value) #.app('localhost:8888')

.app()最终尝试了有和没有,并使用'throttle'而不是'mouseup',结果相同。我正在 JupyterLab 笔记本中尝试此操作,并且安装了 PyViz 扩展。

bokeh       1.2.0
panel       0.6.0
IPython     6.5.0
jupyter_client  5.2.3
jupyter_core    4.4.0
jupyterlab  1.0.2
notebook    5.6.0
4

1 回答 1

1

我检查了源代码,panel发现它没有定义value_throttled属性。要解决这个问题,您需要创建一个继承自IntSlider并添加value_throttled属性的类。然后你可以继续观看value_throttled

import panel as pn
import param

class IntThrottledSlider(pn.widgets.IntSlider):
    value_throttled = param.Integer(default=0)

int_slider = IntThrottledSlider(
    name='Integer Slider', end=5, callback_policy='mouseup')

@pn.depends(int_slider.param.value_throttled, watch=True)
def print_slider_value(slider_value):
    return slider_value

pn.Column(int_slider, print_slider_value)
于 2019-08-01T05:45:33.477 回答