5

我正在尝试将两个 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)
4

0 回答 0