【问题标题】:Ipywidgets observe method on interactive instead of widgetIpywidgets 在交互式而不是小部件上观察方法
【发布时间】:2020-09-15 15:11:22
【问题描述】:

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)

我是新手,如有任何正确用法的帮助,将不胜感激。

【问题讨论】:

    标签: python widget ipython jupyter interactive


    【解决方案1】:

    是的,不,你不能那样做。交互式对象的观察将用于子项的更改。所以,那里没有变化。

    您可以做的就是对孩子们进行观察。像这样。

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2022-01-13
      • 2017-02-28
      • 2016-10-03
      相关资源
      最近更新 更多