链接ipython小部件按钮和滑块值

链接ipython小部件按钮和滑块值,python,widget,ipython-notebook,Python,Widget,Ipython Notebook,我试图找出如何将按钮控件控制的计数器的值链接到滑块控件的值 这里的目标是使用ipython小部件创建一个简单的“类似vcr”的界面,它有三个小部件:一个IntSlider和两个按钮,分别递增计数器和递减计数器。这就是我得到的: import ipywidgets as widgets from functools import partial from IPython.display import display import traitlets class Counter: def _

我试图找出如何将按钮控件控制的计数器的值链接到滑块控件的值

这里的目标是使用ipython小部件创建一个简单的“类似vcr”的界面,它有三个小部件:一个
IntSlider
和两个
按钮,分别递增计数器和递减计数器。这就是我得到的:

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)
因为
计数器
不是
HasTraits

如何将
counter.value
链接到
wpick.value
,以便单击其中一个按钮可以调整滑块上的int值?

根据以下指南,您需要从
DOMWidget
类中插入
计数器
类,如下所示:

from traitlets import CInt, link
class Counter(widgets.DOMWidget):
    value = CInt(0, sync=True)
然后,您可以定义
计数器
小部件和按钮回调方法:

counter = Counter()
def button_plus(name):
    counter.value += 1 if counter.value < 10 else 0
def button_minus(name):
    counter.value -= 1 if counter.value > 0 else 0
并在按钮上注册事件:

wplus.on_click(button_plus)
wminus.on_click(button_minus)

现在,单击按钮将进入/减少计数器的值。

您的答案中的
name
指的是什么?您是否对
wplus
wminus
有不同的定义?@RichSignell-
name
是调用回调方法的小部件的名称。未使用它,但在方法定义中至少需要一个输入,因为单击时的
发送
名称
。我对
wplus
wminus
使用了相同的定义。为什么?这对你不起作用吗?你是对的。一旦我消除了我的编码错误,它就可以正常工作:@RichSignell-只是一个提示:在您的要点中,您没有定义类方法
increment
,但有时它仍然是在上次运行的名称空间中定义的。为了避免这种情况,我总是使用
%reset-f%
启动ipynb。
link((wpick, 'value'), (counter, 'value'))
wplus.on_click(button_plus)
wminus.on_click(button_minus)