我正在尝试将两个 ipython 小部件链接在一起,以便当一个小部件更新(滑块移动、输入文本等)时,另一个小部件也会更新。我发现您可以使用 将值链接在一起traitlets.link
,但找不到仅将更新行为链接在一起的方法。基本上,我希望一个小部件在另一个小部件调用它的on_trait_change
(现在称为observe
)处理程序时调用它。
我不能使用为这个问题建议的方法,因为需要更新的小部件的处理程序依赖于“触发器”小部件无法访问的变量,因此“触发器”小部件的处理程序不能简单地包含所需的操作需要更新的小部件。
例子:
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)