如何在 python 对象和 ipywidget 之间双向 link
how to two-way link between a python object and an ipywidget
亲爱的 ipywidgets
大师,
我想在一些 python 对象的属性和一些 ipywidget 的值之间设置一个 link:
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
一起使用。也许有人可以建议和替代方法?
普通 python 属性(Foo.i
,此处)不提供任何开箱即用的 signals/events,因此没有任何现成的方法可以做到这一点。通过观察 traitlet 并让处理程序设置属性(ipywidget.dlink
可能已经支持这个,不确定),从 traitlet 到属性的一种方式 link 是可能的。有一些事情是相反的,你可能会在 Foo
(https://docs.python.org/2/reference/datamodel.html#object.setattr).
上使用 __setattr__
方法运气好
亲爱的 ipywidgets
大师,
我想在一些 python 对象的属性和一些 ipywidget 的值之间设置一个 link:
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
一起使用。也许有人可以建议和替代方法?
普通 python 属性(Foo.i
,此处)不提供任何开箱即用的 signals/events,因此没有任何现成的方法可以做到这一点。通过观察 traitlet 并让处理程序设置属性(ipywidget.dlink
可能已经支持这个,不确定),从 traitlet 到属性的一种方式 link 是可能的。有一些事情是相反的,你可能会在 Foo
(https://docs.python.org/2/reference/datamodel.html#object.setattr).
__setattr__
方法运气好