我试图弄清楚如何将按钮小部件控制的计数器的值链接到滑块小部件的值。
这里的目标是使用 ipython 小部件创建一个简单的“类似 vcr”的界面,其中包含三个小部件: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)
and here's a screen grab where I've moved the IntSlider to 1 and clicked twice on the increment button:
我显然希望有一个整数值由所有 3 个小部件控制并与所有 3 个小部件同步。
我读到小部件链接 https://github.com/ipython/ipywidgets/blob/master/examples/Widget%20Events.ipynb但我不知道如何执行此操作,因为我的按钮小部件没有值 - 计数器对象具有我想要链接的值。
这不起作用:
l = traitlets.link((counter, 'value'), (wpick, 'value'))
because counter
is not HasTraits
.
我怎样才能得到counter.value
被链接到wpick.value
这样单击其中一个按钮就会调整滑块上的 int ?