Я создаю приложение, используя Glade и Gtk.
У меня есть дерево.В Glade я настроил это древовидное представление так, чтобы его моделью был GtkListstore с именем liststore.В этом хранилище списков есть два столбца типа gcharray.
Я использую pyinotify для определения, когда USB-носитель подключен и отключен.Когда что-то подключено, вот что произошло:
self.liststore.append() # empty row
for value1 in some_list:
row_shape = [value2,value1]
self.liststore.append(row_shape)
По сути, я просто добавляю несколько строк в свой список рассылки.Это работает нормально.
Когда USB-носитель подключен, вот что должно произойти:
current_iter = self.liststore.get_iter_first()
delete_items = list()
while current_iter:
if self.liststore[current_iter][0] == some_value
delete_items.append(current_iter)
current_iter = self.liststore.iter_next(current_iter)
for i in delete_items:
self.liststore.remove(i)
Когда код попадает в часть удаления, я получаю черный экран иошибка:
Gtk-CRITICAL **: gtktreeview.c: 6908 (do_validate_rows): утверждение `gtk_tree_model_iter_next (tree_view_> priv-> model, & iter) 'не выполнено.Существует несоответствие между внутренним представлением GtkTreeView и GtkTreeModel.Как правило, это означает, что модель изменилась, не сообщая представлению.Любое отображение с этого момента, вероятно, будет неправильным.
Что не так в моем процессе удаления?
РЕДАКТИРОВАТЬ:
Я частично решил проблему, установив новое хранилище списков, когда я хочу стереть первое.Мой экран больше не становится черным, но я все еще получаю сообщение об ошибке:
Gtk-CRITICAL **: gtk_list_store_get_value: утверждение 'column n_columns' не удалось