我可以在ipython notebook小部件中向button.on_click注册一个处理程序,但我不知道如何为下拉小部件执行相同操作
import ipywidgets as widgets from IPython.display import display def on_button_clicked(b): print("Button clicked.") button = widgets.Button(description="Click Me!") display(button) button.on_click(on_button_clicked)
但对于
choose_task = widgets.Dropdown( options=['Addition', 'Multiplication', 'Subtraction'], value='Addition', description='Task:', )
似乎只有
on_trait_change(...)
如果我用这个注册处理程序,我可以用它来访问小部件的值吗?我看过处理程序的例子,小部件属于一个子类,处理程序可以使用self来内省.但是如果我不想使用子类,那么处理程序如何知道哪个小部件是事件的目标.
在这个链接和github上的traitlet文档之间,只是在玩游戏,我终于弄明白了:
w = widgets.Dropdown(
options=['Addition', 'Multiplication', 'Subtraction'],
value='Addition',
description='Task:',
)
def on_change(change):
if change['type'] == 'change' and change['name'] == 'value':
print "changed to %s" % change['new']
w.observe(on_change)
display(w)
总体而言,这看起来比不赞成使用的界面更丰富,但它绝对可以使用更多示例.