链接ipython小部件按钮和滑块值
我试图找出如何将按钮控件控制的计数器的值链接到滑块控件的值 这里的目标是使用ipython小部件创建一个简单的“类似vcr”的界面,它有三个小部件:一个链接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 _
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)