python - Ipywidgets 在交互式而不是小部件上观察方法
问题描述
ipython 小部件和交互式对象都有observe() 方法。(请参阅打印语句的结果。)通过以下示例,我可以确认 observe() 方法在滑块小部件上的操作,但不能在交互式 (ie) 对象上确认操作。
问:有什么方法可以使用交互式的观察方法,或者我必须在它的所有小部件组件上调用单独的观察()方法?如果是这样,为什么?
预期行为:更改 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)
推荐阅读
- java - 为什么要再次投射 SSLServerSocketFactory?
- java - Gradle:以编程方式为 compileJava 任务指定编译器选项
- java - 从@ResponseBody 返回 JSONArray 时抛出错误
- intellij-idea - 在 IntelliJ IDEA 中禁用 lint 标记
- android - 如何在 Android 中使用 Amazon Comprehend API
- php - 如何在php中发送带有换行符的电子邮件
- php - 我的登录页面不工作
- go - goroutine 值返回顺序
- wordpress - 如何在自定义简码中读取给定 URL 作为参数的外部页面的标题?
- c++ - 在检查对的一个值后,对向量的 lower_bound