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

Pan*_*Yan 7 python user-interface ipython-notebook

我创建了一个DropDown小部件:

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

我抓住了这个on_trait_change事件:

self.foo_widget.on_trait_change(self.handler, 'value')
Run Code Online (Sandbox Code Playgroud)

现在在处理函数中handler,我想将DropDown值设置回'Default'.但以下代码仅更改值而不更新窗口小部件显示.即使print self.foo_widget.value显示为"默认" ,DropDown仍会显示原始选择值(例如,"C").

self.foo_widget.value = 'Default'
Run Code Online (Sandbox Code Playgroud)

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

实际上,对于列表小部件,似乎我必须清除选项并再次分配选项以使小部件的显示更新.有没有类似的经历?

更新:以下 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'
Run Code Online (Sandbox Code Playgroud)

nlu*_*igi 5

根据选择类的规范,您还必须将selected_label属性设置'Default'为使窗口小部件更新:

self.dropDown.value = 'Default'
self.dropDown.selected_label = 'Default'
Run Code Online (Sandbox Code Playgroud)