我有一个带有定制表编辑器的对象附加到视图。这个表编辑器可以通过用户输入删除它的一些列。当我调用更新函数时,这个函数也会在对象实例化时被调用。
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填充。在视图中,该列还填充了"Format!“关键词。这都是合乎逻辑的,因为视图正在查询一个不再存在的对象。
因此,我的问题是,如何使视图在ModelList对象更改后完全重新加载自身?
我还尝试重新定义edit_traits(),因为这是enaml在构造视图时调用的方法,但该函数只在实例化时调用一次。
非常感谢你的预告。
发布于 2013-04-24 04:03:35
您可以在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这是特征UI中的一种常见模式。在许多地方,您可以选择为Editor提供一个显式的值(通常是静态的),或者为Editor提供包含该值(通常是动态的)的已编辑对象上的特征的名称。
https://stackoverflow.com/questions/16166275
复制相似问题