2019年10月14日月曜日

jupyter widgetsでコールバック

Jupyter のWidgetはポーリングすれば値がとりだせる。今どきのGUIだと常時更新し続けるのが常らしいので、それだけでもこまらないようなのだけど、それだとあまりにバカっぽい。コールバックができる仕掛けを調べてみた。 ここに書いてある。
slider = widgets.IntSlider()
slider.observe(lambda change: print(change), names='value')

display(slider)
のようにobserveでコールバック関数を登録すればいい。 スライドをいじると下のようなイベントがたくさん飛んでくるのが見える。
{'name': 'value', 'old': 0, 'new': 1, 'owner': IntSlider(value=1), 'type': 'change'}
observenames引数がよくわからないが、これを指定しないと _property_lockというnameのチェンジイベントもたくさん飛んでくるようになる。
{'name': '_property_lock', 'old': {'value': 1}, 'new': {}, 'owner': IntSlider(value=1), 'type': 'change'}
なのでつけておいたほうがいいのだろう。 ドキュメントによるとIPython traitlets というものがイベント周りをなんとかしているようなのだけど、どこをみたら書いてあるんだろう。。ここにあった。。

0 件のコメント: