Multi Object View Behavior - Создание редактора для подкласса HasTraits

В настоящее время я пытаюсь создать графический интерфейс traitsUI для класса, который содержит много экземпляров одного объекта. Моя проблема очень похожа на ту, что решена в примере TraitsUI MultiObjectView.

Тем не менее, мне не нравится идея использования контекста, поскольку она требует от меня много раз выписывать одно и то же представление для каждого объекта, который у меня есть (и у меня может быть много). Поэтому я попытался отредактировать код так, чтобы каждый объект Instance of House по умолчанию выглядел как его обычный вид при просмотре с объекта Houses. Это почти сработало, за исключением того, что теперь я получаю кнопку, которая переводит меня к желаемому представлению, вместо того, чтобы видеть представления, вложенные в одно окно (как вывод в примере TraitsUI выше).

Есть ли способ адаптировать ниже, чтобы получить желаемый результат? Я думаю, что мне нужно еще редактировать функцию create_editor, но я могу найти очень мало документации по этому вопросу - только много ссылок на различные фабрики редактора черт...

Спасибо,

Тим

# multi_object_view.py -- Sample code to show multi-object view
#                         with context

from traits.api import HasTraits, Str, Int, Bool
from traitsui.api import View, Group, Item,InstanceEditor

# Sample class
class House(HasTraits):
    address = Str
    bedrooms = Int
    pool = Bool
    price = Int

    traits_view =View(
        Group(Item('address'), Item('bedrooms'), Item('pool'), Item('price'))
        )

    def create_editor(self):
        """ Returns the default traits UI editor for this type of trait.
        """
        return InstanceEditor(view='traits_view')



class Houses(HasTraits):
    house1 = House()
    house2= House()
    house3 = House()
    traits_view =View(
        Group(Item('house1',editor = house1.create_editor()), Item('house2',editor = house1.create_editor()), Item('house3',editor = house1.create_editor()))
        )


hs = Houses()
hs.configure_traits()

1 ответ

Будет ли что-то вроде этой работы? Это немного упрощает вещи и дает вам представление, которое содержит список представлений для ваших домов.

# multi_object_view.py -- Sample code to show multi-object view
#                         with context

from traits.api import HasTraits, Str, Int, Bool
from traitsui.api import View, Group, Item,InstanceEditor

# Sample class
class House(HasTraits):
    address = Str
    bedrooms = Int
    pool = Bool
    price = Int

    traits_view =View(
        Group(
            Item('address'), Item('bedrooms'), Item('pool'), Item('price')
        )
    )


class Houses(HasTraits):
    house1 = House()
    house2= House()
    house3 = House()

    traits_view =View(
        Group(
            Item('house1', editor=InstanceEditor(), style='custom'),
            Item('house2', editor=InstanceEditor(), style='custom'), 
            Item('house3', editor=InstanceEditor(), style='custom')
        )
    )

if __name__ == '__main__':
    hs = Houses()
    hs.configure_traits()
Другие вопросы по тегам