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

时间:2015-09-04 12:24:19

标签: 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']

我捕获了on_trait_change事件:

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

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

self.foo_widget.value = 'Default'

这是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'

1 个答案:

答案 0 :(得分:5)

根据选择类的specification,您还必须将class JSONResponseSerializerWithData: AFJSONResponseSerializer { override func responseObjectForResponse(response: NSURLResponse!, data: NSData!) throws -> AnyObject { do { return try super.responseObjectForResponse(response, data: data) } catch { let nsError = (error as NSError) var userInfo = nsError.userInfo if let errorDetail = userInfo["detail"] as? String { userInfo[JSONResponseSerializerWithDataKey] = errorDetail } else { userInfo[JSONResponseSerializerWithDataKey] = JSONResponseUndefinedAPIFailureReason } throw NSError(domain: nsError.domain, code: nsError.code, userInfo: userInfo) } } } 属性设置为selected_label才能更新小部件:

'Default'