【问题标题】:How to change traitsui view dynamically in active window如何在活动窗口中动态更改traitsui视图
【发布时间】:2013-11-18 23:20:44
【问题描述】:

我想设置一个接口,以便在侦听一个 trait 时,该接口将在不同的预定义 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 的视图就可以了),无论是通过简单还是诡计。

【问题讨论】:

    标签: python traits enthought mayavi traitsui


    【解决方案1】:

    【讨论】:

    • 我需要能够从一个View 动态切换到另一个。可以将所有视图连接成一个大视图并使用visible_when. 控制它们但是我在这样做时遇到了问题 - 有时项目不会显示,直到窗口重建或显示在窗口的错误部分。如果有办法在视图之间动态切换,这是我希望避免的一部分。
    • 我一直在玩这个建议,想看看我能从中获得多少里程。结果是超级丑陋的代码,但我认为原则上,如果不是SceneEditor 的特质,这个解决方案可能会起作用。 SceneEditors 不允许其他 SceneEditor 显示它们的相同场景,无论这些场景当前是否启用。我认为这与我的用例中的visible_when 直接冲突,但在能够在一个视图中定义编辑器然后根据需要在视图之间切换的理想解决方案中却没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多