Как динамически изменить вид traitsui в активном окне

Я хотел бы настроить интерфейс таким образом, чтобы при прослушивании черты, интерфейс переключался между различными предопределенными View объекты. Вот пример:

class App(Handler):
    info=Instance(UIInfo)
    view_type=Enum('slider_view','spinner_view')
    number=Range(1,10)
    message=Str('sawmill')

    spinner_view=View(Item('number',editor=RangeEditor(mode='spinner',high=10,  low=1)),Item('message'),Item('view_type'))
    slider_view=View(Item('number',editor=RangeEditor(mode='slider',high=10,    low=1)),Item('message'),Item('view_type'))

    @on_trait_change('view_type')
    def chg_view_type(self):
        self.reconstruct()

    def init_info(self,info):
        self.info=info
    def reconstruct(self):
        self.info.ui.dispose()
        self.info.object.edit_traits(view=self.view_type)

Этот код работает и делает все, что нужно, для представленного примера с игрушкой. Тем не менее, мое приложение имеет сложные редакторы (в том числе, но не обязательно SceneEditor для сцены майави), которые уничтожают все их содержимое при утилизации. Мне интересно, есть ли более простой способ динамического изменения представления конкретного Item или субпанель (изменяя вид Instance это не изменится, это было бы просто прекрасно), пока окно активно, будь то простота или хитрость.

1 ответ

Если все, что вам нужно, это динамическая видимость, это должно сделать: https://github.com/enthought/traitsui/blob/master/examples/demo/Dynamic_Forms/visible_when.py

Другие вопросы по тегам