Несколько раз я нахожусь в такой ситуации,Non-Hacky решение для среды исполнения созданы черты не могут быть отображены в View
class MainDisplay(HasTraits):
a=Instance(A,())
def __init__(self):
self.a=A()
traits_view=View(...)
class A(HasTraits):
i=Int()
j=Int()
k=Int()
def __init__(self):
i,j,k=something
a_display=Group('i','j','k')
Проблема: Я хочу, чтобы отобразить а.и., a.j, a.k в моем главном дисплее.
Ограничения:
(1) I, J, K абсолютно должны оставаться членами и не MainDisplay. Это просто делает без смысла, чтобы включить их в MainDisplay, и если бы я сделал это для каждой черты, MainDisplay станет слишком захламленным.
(2) MainDisplay не должен inherit класс A. Если это так, я могу сделать «Включить ('a_display')» в пределах traits_view. Это хороший трюк для отсечения некоторого кода из MainDisplay, но в моем случае это не сработает.
(3) MainDisplay не должен просто копировать признаки в A, а затем синхронизировать их. Например MainDisplay.dummy_i = Int(), а затем в init, self.sync_traits ('dummy_i', self.a, 'i', взаимно = True). Наконец используйте 'dummy_i' в MainDisplay.traits_view. Это также работает, но опять же класс MainDisplay становится настолько загроможденным! Кроме того, каждый раз, когда я хочу изменить GUI (или черту), у меня есть два места для редактирования, что замедляет разработку.
Я новичок в GUI, но я чувствую, что не могу переменные, созданные во время выполнения, является странным и неудобным ограничением. Мое впечатление таково, что Enaml, который хочет заменить traitsUI, также имеет это ограничение.
Мой главный интерес - отображение и взаимодействие с 3D-геометриями, созданными Mayavi. Возможно ли, возможно, PyQt не имеет этого ограничения?
Увлекательный. Спасибо за помощь. Я уверен, что могу использовать это в некоторых случаях, но я не совсем из леса. Например, если ai на самом деле является признаком диапазона с высоким и низким значением, заданным с помощью свойств int, также на a, скажем a.ceil_i, a.floor_i, то MainDisplay будет жаловаться на отсутствие ceil_i, floor_i – user3391229
Задача 2: этот трюк не будет работайте, если вы попробуете его в группе признаков участника, а не по каждому признаку в отдельности. например Пункт ('object.a.a_group'). Я предполагаю, что если я никогда не вызываю a.configure_traits(), то a_group никогда не существует. – user3391229
Не уверен в вашем примере диапазона. Для вашего второго, чтобы отобразить представление в представлении, используйте экземпляр (...) –