【问题标题】:Identifying widgets in IPython.html.widgets.interactive识别 IPython.html.widgets.interactive 中的小部件
【发布时间】:2014-10-24 11:04:38
【问题描述】:

我的问题基于交互式小部件文档中的this example,该文档使用IPython.html.widgets.interactive 创建用于探索音频节拍的交互式小部件。这是创建小部件的调用:

v = interactive(beat_freq, f1=(200.0,300.0), f2=(200.0,300.0))

beat_freq 是这样定义的:

def beat_freq(f1=220.0, f2=224.0):
    ...

我对这行代码特别困惑:

f1, f2 = v.children

作者怎么知道子小部件的顺序是(f1, f2),而不是(f2, f1)?仅仅是因为这是他们在创建小部件的交互调用中的顺序吗?或者它是从他们在beat_freq的调用签名中的顺序派生出来的?如果我在 v 创建后添加和删除小部件会怎样?

说实话,我并不真正关心这些问题的答案。我只是想要一种方法来识别与每个变量对应的小部件。我想一定有一种方法可以通过检查ContainerWidgetv 来解决这个问题,而不必知道它是如何创建的。毕竟,v 本身显然知道,因为v.kwargs 是一个将变量名连接到值的字典,并且如果您摆弄小部件,它会相应地更改。不幸的是,这个模块中的文档字符串很少或根本不存在,我自己也无法解决。

【问题讨论】:

    标签: python widget ipython ipython-notebook interactive


    【解决方案1】:

    好的,我想我已经想通了,主要是。第一个问题的答案,是什么决定了子小部件的顺序,似乎是由处理函数beat_freq的调用签名决定的。至少,如果我在beat_freq 的定义中颠倒关键字参数的顺序,而在对interactive 的调用中保持它们相同,则子小部件的顺序会颠倒:它们现在是(f2, f1)。如果beat_freq 被定义为beat_freq(**kwargs) 会发生什么我还没有探索过。无论如何,这对我来说似乎足够特殊,不应该依赖它。

    第二个问题的答案,如何识别每个变量对应的widget,更简单明了。它是子小部件的description traitlet。因此,在示例中,v.children[0].descriptionu'f1'。如果我交换beat_freq 定义中的参数,v.children[0].description 就是u'f2'。我认为,这是识别由交互式创建的小部件的可靠方法。

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2020-08-06
      相关资源
      最近更新 更多