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'}
observeの
names引数がよくわからないが、これを指定しないと
_property_lockという
nameのチェンジイベントもたくさん飛んでくるようになる。
{'name': '_property_lock', 'old': {'value': 1}, 'new': {}, 'owner': IntSlider(value=1), 'type': 'change'}
なのでつけておいたほうがいいのだろう。
ドキュメントによるとIPython traitlets というものがイベント周りをなんとかしているようなのだけど、どこをみたら書いてあるんだろう。。
ここにあった。。
0 件のコメント:
コメントを投稿