我正在尝试将两个ipython小部件链接在一起,这样当一个小部件更新(滑块移动,输入文本等)时,另一个小部件也会更新。我发现您可以使用traitlets.link
将值链接在一起,但无法找到将更新行为链接在一起的方法。基本上我希望一个小部件在另一个小部件的情况下调用它的on_trait_change
(现在称为observe
)处理程序。
我无法使用为this question建议的方法,因为需要更新的窗口小部件的处理程序依赖于“触发器”窗口小部件无法访问的变量,因此“触发器”窗口小部件的处理程序不能简单地包括需要更新的窗口小部件所需的操作。
示例:
from ipywidgets import widgets
from IPython.display import display
data={'foo':3, 'bar':5}
private_data=10 #input1 widget can use this data, input2 widget can't
output=widgets.Text(value='outputs', disabled=True)
def input_update(x):
data['foo']=x
output.value=str(data['foo']+data['bar']+private_data)
#elsewhere in another class, not privy to private_data
def input_update2(y):
data['bar']=y
input1=widgets.interactive(input_update,x=10)
input2=widgets.interactive(input_update2,y=10)
display(output,input1,input2)