Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止将第二个ipwidget更改为两次调用交互函数?_Python_Ipywidgets - Fatal编程技术网

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])