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 ответ
Это немного зависит от варианта использования, но то, что вы предлагаете, выглядит как первый подход.
Некоторые комментарии:
- Вы можете прослушать изменения на b, чтобы убедиться, что C синхронизирован с изменениями на a.
- Вы можете использовать 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