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