在 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'
我创建了一个 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'