2013-02-28 2 views
0

Я создаю gui, используя объекты HasTraits. У меня есть главный объект, а затем объекты для каждого компонента gui. Я хотел бы поделиться объектом с несколькими компонентами. Например, у меня есть главное окно A, которое имеет компоненты B и C. C должен иметь доступ к вещам в 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.D. и D нуждается в вещах в A.B.

Это лучший способ обмениваться объектами, используя черты?

ответ

0

Это зависит от варианта использования, но то, что вы предлагаете, выглядит как первый подход.

Некоторые комментарии:

  1. вы можете слушать изменения на б, чтобы убедиться, что C поддерживается в синхронизации с изменениями на а.
  2. можно использовать DelegatesTo с C черта разоблачить некоторые черты B до C.

Если говорить более с точки зрения дизайна приложения, вы можете посмотреть на предусматриваем и как он использует услуги и чтобы правильно обмениваться объектами в подключаемом приложении.

Пример:

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 
Смежные вопросы