Шаблон наблюдателя с использованием виджета из ipywidgets - PullRequest
0 голосов
/ 16 мая 2018

Попытка воспроизвести пример в http://traitlets.readthedocs.io/en/stable/using_traitlets.html#observe,, но с использованием виджета в качестве свойства класса, поведение изменяется и не наблюдает за изменениями

from ipywidgets import Label
from traitlets import HasTraits, Unicode, observe
class Foo(HasTraits):
    bar = Label()
    baz = Unicode()

    @observe('bar')
    def _observe_bar(self, change):
        print(change['old'])
        print(change['new'])

f = Foo()
f.bar = Label('hello')  # No printing

1 Ответ

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

Я получил ответ на трекер проблем репо ipywidgets от Sylvain Corlay (https://github.com/jupyter-widgets/ipywidgets/issues/2078)

Вам необходимо использовать тип черты Instance. (Instance(Label))

Итак

from ipywidgets import Label
from traitlets import HasTraits, Unicode, observe, Instance
class Foo(HasTraits):
    bar = Instance(Label)
    baz = Unicode()

    @observe('bar')
    def _observe_bar(self, change):
        print(change['old'])
        print(change['new'])

f = Foo()
f.bar = Label('hello')  # No printing
...