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

2024-10-01 15:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这里的目标是使用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)

下面是一个屏幕抓图,我将IntSlider移到1,然后单击了两次增量按钮: enter image description here

我显然希望有一个单一的整数值被控制,并与所有3个小部件同步。在

我读过关于widget linking的文章,但是我不知道怎么做,因为我的按钮小部件没有值——counter对象有我想要链接的值。在

这不起作用:

^{pr2}$

因为counter不是{}。在

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


Tags: importselfvalue链接部件defstepcounter
1条回答
网友
1楼 · 发布于 2024-10-01 15:41:35

遵循this指南,您需要Counter类从DOMWidget类继承而来:

from traitlets import CInt, link
class Counter(widgets.DOMWidget):
    value = CInt(0, sync=True)

然后可以定义counter小部件和按钮回调方法:

^{pr2}$

链接slidercounter小部件:

link((wpick, 'value'), (counter, 'value'))

并在按钮上注册事件:

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

点击按钮现在将增加/减少计数器的值。在

相关问题 更多 >

    热门问题