设置没有选择的ipywidget选项

Set ipywidget options with nothing selected

当我想在 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 = [None, 1, 2]已经够用了。在前面添加 None 可避免触发任何不需要的回调。

现有答案有效,但缺点是它需要在选项中包含 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')

有关这方面的更多详细信息,请参阅 ipywidgets issue #2230