Tim*_*son 13 ipython ipython-notebook
我可以在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)
Run Code Online (Sandbox Code Playgroud)
但对于
choose_task = widgets.Dropdown(
options=['Addition', 'Multiplication', 'Subtraction'],
value='Addition',
description='Task:',
)
Run Code Online (Sandbox Code Playgroud)
似乎只有
on_trait_change(...)
Run Code Online (Sandbox Code Playgroud)
如果我用这个注册处理程序,我可以用它来访问小部件的值吗?我看过处理程序的例子,小部件属于一个子类,处理程序可以使用self来内省.但是如果我不想使用子类,那么处理程序如何知道哪个小部件是事件的目标.
sfj*_*jac 29
在这个链接和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)
Run Code Online (Sandbox Code Playgroud)
总体而言,这看起来比不赞成使用的界面更丰富,但它绝对可以使用更多示例.
您可以在 中指定更改名称observe。这使得代码更清晰,并且不会为您不需要的更改调用处理程序:
from IPython.display import display
from ipywidgets import Dropdown
def dropdown_eventhandler(change):
print(change.new)
option_list = (1, 2, 3)
dropdown = Dropdown(description="Choose one:", options=option_list)
dropdown.observe(dropdown_eventhandler, names='value')
display(dropdown)
Run Code Online (Sandbox Code Playgroud)
受到以前的答案和 lambda 表达式的启发,我使用了这个:
def function(option):
print(option)
w = widgets.Dropdown(
options=['None', 'Option 1', 'Option 2', 'Option 3'],
description='Option:',
disabled=False
)
w.observe(
lambda c: plot_content(c['new']) if (c['type'] == 'change' and c['name'] == 'value') else None
)
display(w)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14818 次 |
| 最近记录: |