TraitsUI,共享一个对象

时间:2013-02-28 19:10:24

标签: python traits enthought traitsui

我正在使用HasTraits对象构建一个gui。我有一个主要对象,然后是gui的每个组件的对象。 我想在多个组件之间共享一个对象。例如,我有一个主窗口 A ,其中包含 B C 组件。 C 需要访问 B 中的内容。目前我在做这个

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.D D 需要 A.B 中的内容。

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

1 个答案:

答案 0 :(得分:0)

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

一些意见:

  1. 您可以收听b上的更改,以确保C与a。
  2. 上的更改保持同步
  3. 您可以使用带有C特征的DelegatesTo将一些B特征暴露给C。
  4. 如果您在应用程序设计方面进行更多讨论,可以查看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