У меня есть объект с настраиваемым редактором таблицы, прикрепленным к представлению. Этот редактор таблиц может удалить часть своего столбца с помощью ввода пользователем. Когда это так, я вызываю функцию обновления, эта функция также вызывается при создании объекта.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. Также в представлении столбец заполняется «Format!». ключевое слово. Это все логично, поскольку представление запрашивает объект, который больше не существует.
Итак, мой вопрос в том, как я могу сделать представление полностью перезагруженным после изменения моего объекта ModelList?
Я также попытался переопределить edit_traits(), так как это метод, называемый enaml при построении представления, но функция вызывается только один раз при создании экземпляра.
Большое спасибо заранее.
Просто для ясности, Enaml здесь действительно не участвует. Вы просто обнаруживаете «traitsui» «Просмотр» через компонент «TraitsItem» Enaml, но «TableEditor» является частью структуры «traitsui», и его поведение не зависит от Enaml. Вы увидите это поведение, используя методы '.edit_traits() /. Configure_traits()' для просмотра графического интерфейса с помощью только 'traitsui'. Я рекомендую удалить тег 'enaml' из этого вопроса. –
Я думаю, что это делает его интересным Робертом, демонстрируя, что traitui и enaml могут хорошо работать вместе. Это очень актуальная информация. – Jelle