Hi, I'm working on implementing a custom tree model. I'm having a problem with dynamically adding items to the tree model, and having the display updated. I've attached a short example program that demonstrates my problem. When run, you get the following output:
Traceback (most recent call last): File "test.py", line 22, in add self.row_inserted(self.on_get_path(item), item) TypeError: iter should be a GtkTreeIter (test.py:30053): Gtk-CRITICAL **: file gtktreeview.c: line 6992 (gtk_tree_view_unref_tree_helper): assertion `node != NULL' failed The three entries that are set up when the model is initialized display just fine. The problem occurs with other row_* signals that I've tried. Can anyone help me figure out my problem?
#!/usr/bin/python import gobject import gtk class Item: def __init__(self, item, model): self.item = item self.model = model def as_string(self): return self.item class Model(gtk.GenericTreeModel): def __init__(self): self.items = [Item('Static 1', self), Item('Static 2', self), Item('Static 3', self)] gtk.GenericTreeModel.__init__(self) def add(self, item): self.items.append(item) self.row_inserted(self.on_get_path(item), item) def on_get_flags(self): return 0 def on_get_n_columns(self): return 1 def on_get_column_type(self, index): return gobject.TYPE_STRING def on_get_path(self, iter): count = 0 for item in self.items: if item is iter: return (count,) return None def on_get_iter(self, path): if len(path) == 0: return None try: return self.items[path[0]] except IndexError: return None return None def on_get_value(self, iter, column): if iter is None: return '' if column == 0: return iter.as_string() return '' def on_iter_next(self, iter): if iter is None: return None for current, next in zip(self.items, self.items[1:]): if iter is current: return next return None def on_iter_children(self, iter): if iter is None: if len(self.items) > 0: return self.items[0] return None return None def on_iter_has_child(self, iter): if iter is None: return len(self.items) > 0 return None def on_iter_n_children(self, iter): if iter is None: return len(self.items) return 0 def on_iter_nth_child(self, iter, n): if iter is None: try: return self.items[n] except IndexError: return None return None def on_iter_parent(self, iter): return None def destroy(widget, data=None): gtk.main_quit() window = gtk.Window() window.connect('destroy', destroy) scrolled = gtk.ScrolledWindow() window.add(scrolled) model = Model() view = gtk.TreeView(model) scrolled.add(view) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn('Item', renderer, text=0) view.append_column(column) window.show_all() gtk.idle_add(model.add, Item('Dynamic 1', model)) gtk.main()
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/