【问题标题】:Two ipython widgets for one variable一个变量的两个 ipython 小部件
【发布时间】:2017-04-10 21:46:28
【问题描述】:

我正在尝试制作一个交互式功能,我可以在其中使用 2 个小部件来控制同一变量的输入。我尝试这样做是因为我希望可以选择滑动值(以便快速查看)并选择一个特定的值(键入一个值)。我尝试将小部件与ipywidget.jslink 链接起来。我猜想一旦链接的小部件可以输入其中任何一个中的值以传递给变量。然而,情况并非如此:下面,只有我在 Slider 中设置的值会更新函数(换句话说,在小部件中输入值不会更新输出)。为什么jslink 不起作用?在这个link 中,我发现用ipw.jslink 代替traitlets.link 效果很好。

import ipywidgets as ipw    
from IPython.display import display
def f(x):
    return x**2
a=ipw.IntSlider(min=-10,max=20,step=1,value=10)
b=ipw.IntText(min=-10,max=20,step=1,value=10)
ipw.jslink((a,'value'),(b,'value'))
wid=ipw.interactive(f, x=a)
display(wid,b)

【问题讨论】:

    标签: python ipywidgets


    【解决方案1】:

    如果问题是后端的 Python 对象没有更新,可能是因为您使用的是 jslink 而不是 link [ref]。否则,我认为这是以前版本的老问题。我用捕获的输出重新创建,滑块和文本都调用函数f(x)

    from IPython.display import display
    
    output = ipw.Output()
    
    @output.capture()
    def f(x):
        print(x**2)
        return x**2
    
    a=ipw.IntSlider(min=-10,max=20,step=1,value=10)
    b=ipw.IntText(min=-10,max=20,step=1,value=10)
    
    ipw.jslink((a,'value'),(b,'value'))
    
    wid=ipw.interactive(f, x=a)
    display(wid,b)
    display(output)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-01
      • 2018-03-10
      • 2020-07-31
      • 1970-01-01
      • 2017-02-02
      • 2021-12-26
      • 2017-04-05
      • 1970-01-01
      相关资源
      最近更新 更多