【问题标题】:Set ipywidget options with nothing selected设置没有选择的 ipywidget 选项
【发布时间】:2021-01-14 11:06:23
【问题描述】:

当我想在 ipywidget 中设置选项而没有选择任何内容时,我会这样做:

import ipywidgets as w
w.Select(options=[1, 2], value=None)

如果我想在现有对象上设置新项目(没有选择任何内容)怎么办?我必须:

import ipywidgets as w
s = w.Select()
...
s.options = [1,2]
s.value = None

但是如果注册了一个回调来接收值更改的通知,它将被调用两次:自动选择1,然后使用NoneNone 很容易被捕获,但 1 似乎是用户选择的有效值。那将是一个错误的回调,因为用户从未真正选择它。

有没有简单的解决方法?

【问题讨论】:

  • 我刚试过这个,如果没有选择任何值,而你设置了s.options = [1,2],那么仍然没有选择任何选项。您能否只观察一个打印参数的简单函数,然后将您看到的内容添加到您的问题中?编辑:我现在看到,它确实选择了 1,您需要一次性更改选项和值。
  • @ac24 我怎样才能在一个声明中做到这一点..?
  • 我刚刚尝试使用with widg.hold_trait_notifications(): 上下文管理器,但出现了一些奇怪的行为,认为这里可能存在错误

标签: python callback jupyter-notebook traits ipywidgets


【解决方案1】:

看起来s.options = [None, 1, 2] 已经足够好了。在前面添加None 可以避免触发任何不需要的回调。

【讨论】:

    【解决方案2】:

    现有答案有效,但缺点是它需要在选项中有None。 但是,有一种解决方法是在列表中只包含“有用”的选项,设置它们后没有选择任何内容:

    import ipywidgets as w
    s = w.Select()
    ...
    s.unobserve(select_handler, names='value')
    s.options = [1, 2]
    s.value = None
    s.observe(select_handler, names='value')
    

    更多详情请见ipywidgetsissue #2230

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 2015-08-27
      • 2018-12-29
      • 1970-01-01
      • 2011-06-08
      • 2012-10-31
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      相关资源
      最近更新 更多