我试图弄清楚如何将按钮小部件控制的计数器的值链接到滑块小部件的值。
这里的目标是使用ipython小部件创建一个简单的" vcr-like"具有三个小部件的接口:IntSlider
和两个Button
,它们递增计数器并递减计数器。这就是我所拥有的:
import ipywidgets as widgets
from functools import partial
from IPython.display import display
import traitlets
class Counter:
def __init__(self, initial=0):
self.value = initial
def increment(self, amount=1):
self.value += amount
return self.value
def button_plus(counter, w):
counter.increment(+1)
def button_minus(counter, w):
counter.increment(-1)
counter = Counter()
# 1 step forward button
wplus = widgets.Button(description='>')
wplus.on_click(partial(button_plus, counter))
# 1 step backward button
wminus = widgets.Button(description='<')
wminus.on_click(partial(button_minus, counter))
# integer slider
wpick = widgets.IntSlider(value=0,min=0,max=10,step=1,description="time step")
display(wminus, wpick, wplus)
print(counter.value)
print(wpick.value)
这是一个屏幕抓取,我将IntSlider移动到1并在增量按钮上单击两次:
我显然希望有一个整数值由所有3个小部件控制并与之同步。
我读到了widget linking,但由于我的按钮小工具没有值,我不知道如何执行此操作 - 计数器对象具有我想要链接的值。
这不起作用:
l = traitlets.link((counter, 'value'), (wpick, 'value'))
因为counter
不是HasTraits
。
如何将counter.value
与wpick.value
相关联,以便点击其中一个按钮会调整滑块上的int?