如何在活动窗口中动态更改traitsui视图

时间:2013-11-18 23:20:44

标签: python traits enthought mayavi 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)

此代码可以正常运行并完成为玩具示例所需执行的所有操作。但是,我的应用程序有复杂的编辑器(包括但不一定限于mayavi场景的SceneEditor),在处理时会破坏它们的全部内容。我想知道是否有一种更简单的方法可以动态更改特定Item或子面板的视图(更改Instance的视图,如果窗口处于活动状态,则不会改变)无论是简单还是诡计。

1 个答案:

答案 0 :(得分:0)

如果您只需要动态可见性,则应执行以下操作: https://github.com/enthought/traitsui/blob/master/examples/demo/Dynamic_Forms/visible_when.py