我正在尝试制作一个交互式函数,在其中我可以使用同一变量的 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)