首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >traitsui对象模型是如何工作的?

traitsui对象模型是如何工作的?
EN

Stack Overflow用户
提问于 2013-11-04 22:52:42
回答 1查看 132关注 0票数 0

有人能解释一下为什么这段代码会崩溃吗?我认为应该发生的是,如果它使用的是完全限定的特征名,那么它就不应该崩溃。

代码语言:javascript
复制
from traits.api import *
from traitsui.api import *

class Struct(HasTraits): pass

class Struct1(Struct):
  some_data=Int(4)
  some_more_data=Str('pizza')

class Struct2(Struct):
  some_data=Int(5)
  some_more_data=Str('wossar')

class Subwindow(Handler):
  struct1=Instance(Struct1)
  struct2=Instance(Struct2)

  which_struct=Enum(1,2)
  cur_struct=Any

  def _struct1_default(self): return Struct1()
  def _struct2_default(self): return Struct2()
  def _cur_struct(self): return self.struct1

  @on_trait_change('which_struct')
  def switch_views(self): NotImplemented #switch views here

traits_view=View(
    Item(name='which_struct'),
    Item(name='object.cur_struct.some_data'),
    Item(name='object.cur_struct.some_more_data'),
)

Subwindow().configure_traits()

当我运行这个,我得到

代码语言:javascript
复制
AttributeError: 'Subwindow' object has no attribute 'object.cur_struct.some_data'

但是如果你检查这个物体的话,它会的。

我在摆弄这个例子,如果我用一个cur_struct特征替换Property,我就让它正常工作了,我不知道为什么。但是,对于我的实际应用程序来说,这是不可行的,因为另一个类侦听来自完全不同类的事件,并切换cur_struct

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 15:28:18

啊,别用Item(name=...)。只需将名称作为第一个位置参数传递。构造函数在将其赋值给name特征之前对传递给它的值进行一些特殊处理。只有在需要避免这种处理时,才会在内部显式使用name

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19778831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档