2013-02-28 132 views
0

我在用HasTraits对象构建一个gui。我有一个主要的对象,然后是gui的每个组件的对象。 我想跨多个组件共享一个对象。例如,我有一个主窗口A它有组件BCC需要访问B中的东西。目前我正在这样做TraitsUI,共享对象

class B(HasTraits): 
    ... 

class C(HasTraits): 
    ... 

class A(HasTraits): 
    b = Instance(B,()) 
    c = Instance(C) 
    ... 

def _c_default(self): 
    return C(b = self.b,...) 
    ... 

这似乎不是最好的办法做到这一点。还有子分组件A.C.DD需要的东西在A.B

这是使用特征共享对象的最佳方式吗?

回答

0

这取决于用例,但你的建议看起来像第一种方法。

一些评论:

  1. 你可以听上b改变为确保C的保持同步上的变化。
  2. 你可以使用DelegatesTo与C特质暴露了B性状为C.

如果在应用程序设计方面谈论更多,你可能看Envisage的以及它如何使用服务,扩展点来正确共享可插入应用程序中的对象。

实施例:

class B(HasTraits): 
    name = Str 

class C(HasTraits): 
    b = Instance(B) 
    name = DelegatesTo(b) 

class A(HasTraits): 
    b = Instance(B,()) 
    c = Instance(C) 
    ... 

    def _c_default(self): 
     return C(b = self.b,...) 
     ... 

    def _b_changed(self): 
     self.c.b = b