每当第一个滑块发生变化时我更新第二个滑块时,函数f
就会被调用两次
我理解为什么会这样,但是由于在计算我实际想要显示的内容时需要花费一些时间,因此会在输出中引起一些不必要的闪烁。
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])
答案 0 :(得分:0)
尽管您似乎在交互功能中拥有更昂贵的功能,但我没有看到太多的闪烁。您能描述一下想要要发生的事情吗?
与a.observe相比,也许widgets.link会有所帮助吗?
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)
widgets.link((a, 'value'), (b, 'value'))
out = widgets.interactive_output(f, {"a":a, "b":b})
widgets.VBox([caption,a,b,out])