TraitsUI, общий доступ к объекту

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

Который кажется не лучшим способом сделать это. Также есть суб-подкомпоненты, так что ACD, и D нуждается в вещах в AB.

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

1 ответ

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

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

  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
Другие вопросы по тегам