Python traitsui对象模型是如何工作的

Python traitsui对象模型是如何工作的,python,traits,enthought,traitsui,Python,Traits,Enthought,Traitsui,有人能解释一下为什么这个代码会崩溃吗?我认为应该发生的是,如果它使用完全限定的特征名称,它就不会崩溃,在本例中就是这样 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_dat

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

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()
当我运行这个时,我会

AttributeError: 'Subwindow' object has no attribute 'object.cur_struct.some_data'
但是,如果你检查这个物体,它会


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

啊,不要使用
项(name=…)
。只需传递名称作为第一个位置参数。构造函数对传递给它的值进行一些特殊处理,然后将其分配给
名称
特征。明确使用
名称
仅在我们需要避免这种处理时才在内部使用。

您的回溯显示
交互子窗口
,但这在您引用的代码中没有出现。请更正您的示例,使其运行并给出您所询问的错误。谢谢啊,对不起,这只是子窗口。更简单的例子给出了相同的错误。