一个变量的两个 ipython 小部件



我正在尝试制作一个交互式函数,在其中我可以使用同一变量的 2 个小部件控制输入。我尝试这样做是因为我想可以选择滑动值(用于快速查看(并选择一个特定的值(键入一个值(。我尝试将小部件与ipywidget.jslink链接.我猜一旦链接了小部件,我就可以在其中任何一个输入值以传递给变量。但是,事实并非如此:在下面,只有我在滑块中设置的值会更新函数(换句话说,在小部件中键入值不会更新输出(。为什么jslink不起作用?在此链接中,我发现用ipw.jslink代替traitlets.link工作正常。

import ipywidgets as ipw    
from IPython.display import display
def f(x):
    return x**2
a=ipw.IntSlider(min=-10,max=20,step=1,value=10)
b=ipw.IntText(min=-10,max=20,step=1,value=10)
ipw.jslink((a,'value'),(b,'value'))
wid=ipw.interactive(f, x=a)
display(wid,b)

如果问题是后端的 Python 对象没有更新,可能是因为您使用的是 jslink 而不是 link [ref]。否则,我认为这是以前版本的旧问题。我用捕获的输出重新创建,滑块和文本都调用函数f(x)

from IPython.display import display
output = ipw.Output()
@output.capture()
def f(x):
    print(x**2)
    return x**2
a=ipw.IntSlider(min=-10,max=20,step=1,value=10)
b=ipw.IntText(min=-10,max=20,step=1,value=10)
ipw.jslink((a,'value'),(b,'value'))
wid=ipw.interactive(f, x=a)
display(wid,b)
display(output)

最新更新