Поведение мультиобъектного представления — создание редактора для подкласса HasTraits

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

Однако мне не нравится идея использования контекста, так как это требует от меня записи одного и того же представления много раз для каждого объекта, который у меня есть (а у меня может быть много). Поэтому я попытался отредактировать код, чтобы каждый экземпляр объекта 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()

person user2175850    schedule 05.06.2014    source источник


Ответы (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()
person dpinte    schedule 06.06.2014
comment
Спасибо! Это дает идеальный результат. Не могли бы вы объяснить, что на самом деле делает style=custom? Я не смог найти много информации об этом атрибуте на странице документации traitsui.Group. - person user2175850; 06.06.2014