Python 如何防止将第二个ipwidget更改为两次调用交互函数?
当我在第一个滑块更改时更新第二个滑块时,函数Python 如何防止将第二个ipwidget更改为两次调用交互函数?,python,ipywidgets,Python,Ipywidgets,当我在第一个滑块更改时更新第二个滑块时,函数f会被调用两次 我理解为什么会发生这种情况,但它会导致输出中出现一些不必要的闪烁,因为计算我实际想要显示的内容需要一些时间 最小工作示例 我没有看到太多的闪烁,尽管看起来你在交互中有一个更昂贵的功能。你能描述一下你希望再发生些什么吗 也许widgets.link与a.observe相比会有所帮助 将IPyWidget作为小部件导入 ncalls=0 caption=widgets.Label(value='N调用:'+str(ncall)) a=wid
f
会被调用两次
我理解为什么会发生这种情况,但它会导致输出中出现一些不必要的闪烁,因为计算我实际想要显示的内容需要一些时间
最小工作示例
我没有看到太多的闪烁,尽管看起来你在交互中有一个更昂贵的功能。你能描述一下你希望再发生些什么吗 也许widgets.link与a.observe相比会有所帮助
将IPyWidget作为小部件导入
ncalls=0
caption=widgets.Label(value='N调用:'+str(ncall))
a=widgets.IntSlider(最小值=-5,最大值=5,值=1,说明=a')
b=widgets.IntSlider(最小值=-5,最大值=5,值=1,说明=b')
def手柄滑块更改(更改):
b、 值=更改[“新”]-更改[“旧”]+b.值
def f(a,b):
全球NCALL
ncalls+=1
caption.value='N个调用:'+str(nCall)
印刷品(a、b)
link((a,'value'),(b,'value'))
out=widgets.interactive_输出(f,{“a”:a,“b”:b})
VBox([caption,a,b,out])
import ipywidgets as widgets
ncalls =0
caption = widgets.Label(value='N Calls: ' + str(ncalls))
a = widgets.IntSlider(min=-5, max=5, value=1, description='a')
b = widgets.IntSlider(min=-5, max=5, value=1, description='b')
def handle_slider_change(change):
b.value = change["new"] - change["old"] + b.value
def f(a, b):
global ncalls
ncalls +=1
caption.value = 'N Calls: ' + str(ncalls)
print(a,b)
a.observe(handle_slider_change, names='value')
out = widgets.interactive_output(f, {"a":a, "b":b})
widgets.VBox([caption,a,b,out])