2015-10-25 6 views
0

Несколько раз я нахожусь в такой ситуации,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 не имеет этого ограничения?

ответ

1

В режиме MainDisplay вы можете обратиться к Item("object.a.i") и т. Д., Где object - это буквально то, что вы набираете (а не заполнитель). Это описано в документах TraitsUI «Расширенные концепции представления», раздел Multi-Object Views.

+0

Увлекательный. Спасибо за помощь. Я уверен, что могу использовать это в некоторых случаях, но я не совсем из леса. Например, если ai на самом деле является признаком диапазона с высоким и низким значением, заданным с помощью свойств int, также на a, скажем a.ceil_i, a.floor_i, то MainDisplay будет жаловаться на отсутствие ceil_i, floor_i – user3391229

+0

Задача 2: этот трюк не будет работайте, если вы попробуете его в группе признаков участника, а не по каждому признаку в отдельности. например Пункт ('object.a.a_group'). Я предполагаю, что если я никогда не вызываю a.configure_traits(), то a_group никогда не существует. – user3391229

+0

Не уверен в вашем примере диапазона. Для вашего второго, чтобы отобразить представление в представлении, используйте экземпляр (...) –

 Смежные вопросы

  • Нет связанных вопросов^_^