2013-02-28 137 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