首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >enaml表编辑器

enaml表编辑器
EN

Stack Overflow用户
提问于 2013-04-23 17:53:12
回答 1查看 753关注 0票数 0

我有一个带有定制表编辑器的对象附加到视图。这个表编辑器可以通过用户输入删除它的一些列。当我调用更新函数时,这个函数也会在对象实例化时被调用。

代码语言:javascript
复制
class ModelList(HasTraits):

     models = List(Instance(Model))
     table_editor = TableEditor()
     view = View(Item(name='variables', show_label=False, editor=table_editor))

     def update(self) :
         columns = []
         for model in self.models :
             columns.append(ObjectColumn(..some stuff..))
         self.table_editor.columns = columns
         self.traits_modified = True

在enaml布局中,这个对象是这样引用的:

代码语言:javascript
复制
enamldef Main(Window):
    attr model_list
    Container:
        TraitsItem: table:
            model := model_list

它在实例化时工作得很好,但是当一列被删除时,它会留在视图中,而终端会被AttributeErrors填充。在视图中,该列还填充了"Format!“关键词。这都是合乎逻辑的,因为视图正在查询一个不再存在的对象。

因此,我的问题是,如何使视图在ModelList对象更改后完全重新加载自身?

我还尝试重新定义edit_traits(),因为这是enaml在构造视图时调用的方法,但该函数只在实例化时调用一次。

非常感谢你的预告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 04:03:35

您可以在ModelList类上以特征的形式提供ObjectColumns列表。不是在TableEditor工厂对象上定义columns列表,而是使用columns_name参数指向ModelList上的特征的名称。无论何时更新ModelList上的列表,TableEditor实现都应该遵循。

代码语言:javascript
复制
class ModelList(HasTraits):
    models = List(Instance(Model))
    columns = List(Instance(ObjectColumn))
    variables = ...

    traits_view = View(UItem('variables',
        editor=TableEditor(columns_name='columns')))

    def update(self):
        columns = []
        for model in self.models :
            columns.append(ObjectColumn(..some stuff..))
        self.columns = columns

这是特征UI中的一种常见模式。在许多地方,您可以选择为Editor提供一个显式的值(通常是静态的),或者为Editor提供包含该值(通常是动态的)的已编辑对象上的特征的名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16166275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档