【问题标题】:TraitsUI, sharing an objectTraitsUI,共享对象
【发布时间】:2013-02-28 19:10:23
【问题描述】:

我正在使用 HasTraits 对象构建一个 gui。我有一个主要对象,然后是 gui 的每个组件的对象。 我想跨多个组件共享一个对象。例如,我有一个主窗口 A,其中包含组件 BCC 需要能够访问 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.DD需要A.B里面的东西。

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

【问题讨论】:

    标签: python traits enthought traitsui


    【解决方案1】:

    这在一定程度上取决于用例,但您的建议看起来像是第一种方法。

    一些cmets:

    1. 您可以监听 b 上的更改,以确保 C 与 a 上的更改保持同步。
    2. 您可以将 DelegatesTo 与 C 特征一起使用,以向 C 公开一些 B 特征。

    如果您在应用程序设计方面谈论更多,您可能会查看 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
    

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 2017-04-08
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多