为了账号安全,请及时绑定邮箱和手机立即绑定

Ipywidgets 观察交互式方法而不是小部件

Ipywidgets 观察交互式方法而不是小部件

慕容3067478 2023-08-08 17:35:12
ipython 小部件和交互式对象都有observe() 方法。(请参阅 print 语句的结果。)通过以下示例,我可以确认observe() 方法在滑块小部件上的操作,但不能在交互式(即)对象上确认。问:有什么方法可以使用交互的observe方法,或者我必须对所有小部件组件调用单独的observe()方法?如果是这样,为什么?预期行为:更改 inp1 后打印“即观察到的更改”,from IPython.display import displayimport ipywidgets as widgetsint_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))    returndef report_int_range0_change(change):    with output:        print('int_range0 change observed'+str(change))    returndef report_ie_change(change):    with output:        print('ie change observed'+str(change))    returnie = 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)我是新手,任何有关正确用法的帮助将不胜感激。
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

是的,不,你不能那样做。交互对象的观察将是针对儿童的变化。所以,那里没有变化。


相反,你可以做的是对孩子们进行观察。像这样。


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)


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信