如何解决Ipywidgets在交互式而非小部件上观察方法
ipython窗口小部件和交互式对象都具有watch()方法。 (请参阅打印语句的结果。) 通过下面的示例,我可以确认observe()方法在滑块控件上的动作,而不是在交互式(即)对象上的动作。
问:有什么方法可以使用交互式的Observe方法,或者我必须在所有小部件组件上调用单独的observe()方法吗?如果是这样,为什么?
预期行为:在更改inp1之后打印“即已观察到更改”,
from IPython.display import display
import ipywidgets as widgets
int_range0_slider = widgets.IntSlider()
int_range1_slider = widgets.IntSlider()
output = widgets.Output()
def interactive_function(inp0,inp1):
with output:
print('ie changed. int_range0_slider: '+str(inp0)+' int_range1_slider: '+str(inp1))
return
def report_int_range0_change(change):
with output:
print('int_range0 change observed'+str(change))
return
def report_ie_change(change):
with output:
print('ie change observed'+str(change))
return
ie = widgets.interactive(interactive_function,inp0=int_range0_slider,inp1=int_range1_slider)
print(int_range0_slider.observe)
print(ie.observe)
int_range0_slider.observe(report_int_range0_change,names='value')
ie.observe(report_ie_change)
display(int_range0_slider,int_range1_slider,output)
我是新手,对于正确用法的任何帮助将不胜感激。
解决方法
是的,不,你不能那样做。交互式对象的观察将用于儿童的变化。所以,那里没有变化。
你可以做的是观察孩子们。像这样。
for child in ie.children:
child.observe(report_ie_change)
因此,您的代码将如下所示:
from IPython.display import display
import ipywidgets as widgets
int_range0_slider = widgets.IntSlider()
int_range1_slider = widgets.IntSlider()
output = widgets.Output()
def interactive_function(inp0,inp1):
with output:
print('ie changed. int_range0_slider: '+str(inp0)+' int_range1_slider: '+str(inp1))
return
def report_int_range0_change(change):
with output:
print('int_range0 change observed'+str(change))
return
def report_ie_change(change):
with output:
print('ie change observed'+str(change))
return
ie = widgets.interactive(interactive_function,inp0=int_range0_slider,inp1=int_range1_slider)
# print(int_range0_slider.observe)
# print(ie.observe)
# int_range0_slider.observe(report_int_range0_change,names='value')
for child in ie.children:
child.observe(report_ie_change)
display(int_range0_slider,int_range1_slider,output)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。