更改散景滑块的值

问题描述 投票:0回答:3

我希望能够以编程方式更改滑块的相关内容(值、开始/结束值)。

所以我采用标准的 slider.py 演示,并在末尾添加以下内容:

for i in range(5):
    amp_slider.value = amp_slider.value + 1
    time.sleep(1)

这应该使该值每秒向上移动几秒钟。但滑块不动。我究竟做错了什么?或者类似地,如果我尝试更改 .end 或 .start 值。

[我知道滑块应该是输入设备而不是输出设备。但尽管如此,我正在努力控制它的行为。]

python slider bokeh
3个回答
2
投票

bokeh

show()
将图表输出为 html 和 javascript。一旦完成此操作,就无法再对其进行修改(除非您编写了一些用于修改页面的 javascript)。

您需要一个在“动态”窗口中呈现的库(例如

matplotlib
才能重新绘制这样的图表。


0
投票

创建页面后,程序中唯一会再次使用的代码是回调函数。如果你调整 sliders.py 使其显示为:

def update_title(attrname, old, new):
    amplitude.value += 1

每次更新文本,幅度都会增加。


0
投票

我意识到这个问题已经有六年了,但在搜索这个主题时仍然会出现,所以......如果您创建一个服务器程序并使用“bokehserve --show”托管它,您可以使用Python以编程方式更新Bokeh滑块your_app.py'.

例如,这些回调函数更改滑块的起始值和结束值:

def _update_slider_start(self, attr, old, new):
    new_value = list(self.slider.value)
    new_value[0] = new
    new_value = tuple(new_value)
    self.slider.update(start=0.0, end=1.0, value=new_value)

def _update_slider_end(self, attr, old, new):
    new_value = list(self.slider.value)
    new_value[1] = new
    new_value = tuple(new_value)
    self.slider.update(start=0.0, end=1.0, value=new_value)

在此示例中,Bokeh Slider 对象是类的成员,并引用为 self.slider。我的范围固定在 0 到 1 之间,但这很容易改变。

然后在我的用例中,当绘图范围发生变化时,我会调用这些回调函数:

self.plot.y_range.on_change('start', self._update_slider_start)
self.plot.y_range.on_change('end', self._update_slider_end)

我还从 Bokeh 网站的一个示例开始,该示例有一个滑块可以更改绘图的轴范围。但是,当绘图缩放时,它不会更改滑块。这会导致用户界面变得困难,同时使用缩放和滑块会导致图表范围跳跃。此代码片段允许滑块在绘图缩放后对绘图轴进行增量调整。

© www.soinside.com 2019 - 2024. All rights reserved.