如何在python对象和ipywidget之间进行双向链接

时间:2018-05-14 17:52:17

标签: events traits ipywidgets

亲爱的ipywidgets大师,

我想在某些python对象的属性和某些ipywidget的值之间建立一个链接:

import ipywidgets as ipyw

w = ipyw.IntSlider(42)

class Foo(object):
    def __init__(self, i=0):
        self.i = i  # not a traitlet, just an integer
foo = Foo(w.value)

two_way_link((w, 'value'), (foo, 'i'))  # mimics ipyw.link()

foo.i = 5  # will move the slider of w
w.value = 8  # update foo.i

我想到two_way_link在foo.i周围实例化一个包装器traitlet,然后使用ipyw.link和这个包装器w.value。也许有人可以建议和替代方法?

1 个答案:

答案 0 :(得分:1)

普通python属性(Foo.i,这里)不提供开箱即用的任何信号/事件,因此没有任何现有方法可以做到这一点。通过观察traitlet可以实现从traitlet到属性的单向链接,并让处理程序设置属性(ipywidget.dlink可能已经支持这个,不确定)。如果采用另一种方式,您可能会对__setattr__https://docs.python.org/2/reference/datamodel.html#object.setattr)上的Foo方法感到满意。