在 IPython Widgets 中,如何使用新值更新 DropDown 小部件?

In IPython Widgets, how to update the DropDown widget with new value?

我创建了一个 DropDown 小部件:

self.foo_widget = widgets.Dropdown(description='Lorem ipsum', width=100)
self.foo_widget.options = ['Default', 'A', 'B', 'C', 'D']

然后我捕获了 on_trait_change 事件:

self.foo_widget.on_trait_change(self.handler, 'value')

现在在处理程序函数 handler 中,我想将 DropDown 值设置回 'Default'。但是下面的代码只是改变了值而不更新小部件的显示。即使 print self.foo_widget.value 显示为 'Default',DropDown 仍然显示原始选择值(例如 'C')。

self.foo_widget.value = 'Default'

这是 IPython 小部件的错误吗?导致视图更新的正确方法是什么?

事实上,对于列表小部件,似乎我必须清除选项并再次分配选项才能使小部件的显示更新。任何人都有类似的经历?

更新: 下面 nluigi 的回答效果很好。如下例所示。

class test(object): 
    def __init__(self):
        self.foo_widget = widgets.Dropdown(description='Lorem ipsum', width=100)
        self.foo_widget.options = ['Default', 'A', 'B', 'C', 'D']
        self.foo_widget.on_trait_change(self.handler, 'value')
        display(self.foo_widget)

    def handler(self, name, old, new):
        print(self.foo_widget.value)
        print(self.foo_widget.selected_label)
        self.foo_widget.value = 'Default'
        self.foo_widget.selected_label = 'Default'

根据选择 class 的 specification,您还必须将 selected_label 属性设置为 'Default' 以使小部件更新:

self.dropDown.value = 'Default'
self.dropDown.selected_label = 'Default'