鼠标向上触发事件,而不是使用面板滑块小工具连续触发事件

2022-04-07 00:00:00 python bokeh holoviews pyviz holoviz

问题描述

函数如何监视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(),结果都是一样的,并且使用了‘Thttle’而不是‘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

解决方案

我查看了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)

相关文章