2013-11-18 3 views
3

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

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

ответ

0

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

+0

Мне нужна возможность динамически переключаться с одного 'View' к другому. Возможно, можно объединить все взгляды в один большой вид и контролировать их с помощью 'visible_when.'. Но у меня были проблемы с детализацией вещей в макете при выполнении этого - иногда элементы не отображаются до тех пор, пока окно не будет перестроено или показывается в неправильной части окна. Это часть того, чего я надеялся избежать, если бы существовал способ динамического переключения между представлениями. – aestrivex

+0

Я играл с этим предложением, пытаясь понять, сколько миль я мог бы выбраться из него. В результате получается супер-уродливый код, но я думаю, что в принципе это решение может работать, если не для идиосинкразий «SceneEditor». 'SceneEditor' не позволяют другим SceneEditors отображать те же самые сцены, независимо от того, включены ли эти сцены в настоящее время. Я думаю, что это прямо связано с «visible_when» в моем случае использования, но не в желаемом решении, позволяющем определить редактор в одном представлении, а затем переключиться между представлениями по мере необходимости. – aestrivex