как сделать двустороннюю связь между объектом Python и ipywidget - PullRequest
0 голосов
/ 14 мая 2018

Уважаемые 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 создании экземпляра traiplet-обёртки вокруг foo.i, а затем использовал ipyw.link с этой обёрткой и w.value. Может быть, кто-то может предложить и альтернативный метод?

1 Ответ

0 голосов
/ 25 мая 2018

Обычные атрибуты Python (Foo.i, здесь) не дают никаких сигналов / событий из коробки, поэтому не существует никакого способа сделать это.Ссылка в одну сторону от traitlet к атрибуту возможна путем наблюдения traitlet и установки атрибута обработчиком (ipywidget.dlink может уже поддерживать это, не уверен).Имея что-то, что идет другим путем, вам может повезти с методом __setattr__ на Foo (https://docs.python.org/2/reference/datamodel.html#object.setattr).

...