IPywidgets的observe方法封装入类后无法触发问题求助
问题成因
你将逻辑封装到类的过程中,调用ipywidgets组件的observe方法时,漏传了第二个参数:需要监听的属性名'value'。
ipywidgets的observe方法默认行为是:如果没有指定监听的属性,会监听组件的所有属性变化(包括选项列表、描述文本、可见性等所有状态字段)。此时你的回调函数直接读取change.new会拿到大量非预期的属性变化值,无法触发正常的逻辑。
对比两份代码可以发现:
- 非类实现的正常版本中,你明确指定了仅监听
value属性的变化:a.observe(getvaluea, 'value') b.observe(getvalueb, 'value') c.observe(getvaluec, 'value') - 类实现的版本中,你遗漏了这个参数:
self.a.observe(self.getvaluea) self.b.observe(self.getvalueb) self.c.observe(self.getvaluec)
修复方案
将类中__init__方法里的三行observe调用补充'value'参数即可:
self.a.observe(self.getvaluea, 'value') self.b.observe(self.getvalueb, 'value') self.c.observe(self.getvaluec, 'value')
修改后运行代码,切换下拉框选项即可正常更新self.selected字典,输出组件也会同步打印最新的字典内容。
内容的提问来源于stack exchange,提问作者Paisley
相关产品推荐
相关产品推荐

