设置没有选择的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
,然后 None
。 None
很容易被捕获,但 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。
当我想在 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
,然后 None
。 None
很容易被捕获,但 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。