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 при создании представления, но функция вызывается только один раз при создании экземпляра.
Большое спасибо заранее.
1 ответ
Вы можете предоставить список ObjectColumns
как черта на вашем ModelList
учебный класс. Вместо определения columns
список на TableEditor
заводской объект, использование 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
Это общий шаблон в пользовательском интерфейсе черт. Во многих местах у вас есть выбор между Editor
явное значение (которое обычно является статическим) или дает Editor
имя признака отредактированного объекта, который содержит (обычно динамическое) значение.