Python 性状ENML:在原子模型中观察性状变化

Python 性状ENML:在原子模型中观察性状变化,python,traits,chaco,enaml,Python,Traits,Chaco,Enaml,我正在使用Traits Enaml库编写一个应用程序。我的大多数应用程序都是用Atom编写的,只有一些类需要显示Chaco图。这些类继承自HasTraits。例如: def SomeClass(HasTraits): some_attr = Any() # Attribute that changes on interaction with plot plot = Plot() # Chaco plot 每个SomeClass实例都有一个Chaco图,用户可以与之交互。这些将使

我正在使用Traits Enaml库编写一个应用程序。我的大多数应用程序都是用Atom编写的,只有一些类需要显示Chaco图。这些类继承自HasTraits。例如:

def SomeClass(HasTraits):
    some_attr = Any() # Attribute that changes on interaction with plot
    plot = Plot() # Chaco plot
每个SomeClass实例都有一个Chaco图,用户可以与之交互。这些将使用TraitsView小部件显示在我的UI中。如果用户单击绘图中的某个点,这将触发Someclass实例的某些特征的更改

我的模型(基于Atom)包含SomeClass实例和SomeClass实例列表

def Model(Atom):
    ex = Typed(SomeClass) # SomeClass instance
    l = ContainerList(Typed(SomeClass)) # List of SomeClass instances
基于此,我有两个问题:

1) 如何从Atom模型中观察某个Class_实例中的更改?

当用户与任何绘图交互时,我希望在模型中触发函数调用。如果某个类继承自Atom,我可以使用@observe监听更改,并在每次观察到的属性更改时执行函数调用:

@observe('ex.some_attr')
def change_occurred(self,change):
    print "ex.some_attr changed"
    self.do_stuff()
但是,@observe要求observed属性必须是Atom成员。SomeClass中的trait显然不是Atom成员,那么我如何解决这个问题呢?Traits Enaml是否提供了从Atom对象中侦听HasTraits对象更改的工具

或者,有没有更好的方法来解决这个问题

2) 如何观察列表中任何元素的属性变化?

如果可以按照上述问题所述进行观察,我将如何观察列表中任何元素的变化?在Traits中,我会观察到任何列表项的变化,如下所示:

def AnotherClass(HasTraits):
    some_attr = List(Instance(SomeClass)) # List of SomeClass instances which have some trait that changes during runtime.
然而,我不知道如何倾听列表中任何特定元素特征的变化。原子观测也是如此

非常感谢您的任何建议