0

HasTraits オブジェクトを使用して GUI を構築しています。メイン オブジェクトと、GUI の各コンポーネントのオブジェクトがあります。複数のコンポーネントでオブジェクトを共有したいと考えています。たとえば、コンポーネントBCを持つメイン ウィンドウAがあります。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,...)
    ...

これは最善の方法ではないようです。また、サブサブコンポーネントがあるため、ACD、およびDにはABのものが必要です。

これは、特性を使用してオブジェクトを共有するための最良の方法ですか?

4

1 に答える 1

0

ユースケースにも少し依存しますが、あなたが提案することは最初のアプローチのように見えます。

いくつかのコメント:

  1. bの変更を聞いて、Cがaの変更と同期していることを確認できます。
  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
于 2013-03-21T09:17:19.397 に答える