繁体   English   中英

Enthought enaml tableeditor

[英]Enthought enaml tableeditor

我有一个对象附加到视图的自定义表编辑器。 此表编辑器可以通过用户输入删除其某些列。 在我调用更新函数的情况下,也会在对象的实例化时调用此函数。

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布局中,这个对象被称为:

enamldef Main(Window):
    attr model_list
    Container:
        TraitsItem: table:
            model := model_list

它在实例化时效果很好,但是当一个列被删除时,它会停留在视图中,终端会被AttributeErrors填充。 在视图中,该列也填充了“格式化”! 关键词。 这是完全合乎逻辑的,因为视图正在查询不再存在的对象。

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

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

非常感谢提前。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM