Re: problema con Pygtk + Treeview + TreeModelFilter



2008/11/13 Eduardo Silva <edsiper gmail com>:
> En un treeview me es imposible hacer modificaciones con set_value()... lo
> raro es que hice casos de prueba y si tengo un treeview sin filtro funciona,
> si tiene filtro falla con:
> tv_fail.py:19: GtkWarning: gtk_tree_store_set_value: assertion `VALID_ITER
> (iter, tree_store)' failed
>   model.set_value (iter, 0, 'New value...')
> lo raro es que el iter es totalmente valido...

Eduardo!

El iter es invalido si tienes encadenados filtros entre el modelo y la
vista, ya que debes convertirlo entre el modelo/filtro superior y el
inferior (child_to_iter o iter_to_child depende desde donde la
conversion); esto sale oscuramente en alguna de las guias de pygtk.
Tambien puedes crear tus propios filtros.

Mas o menos asi:

f2 FILTRO2 f2_iter
   f1_iter = f2.iter_to_child(f2_iter)
   f2_iter = f2.child_to_iter(f1_iter)
f1 FILTRO1 f1_iter
   m1_iter = f1.iter_to_child(f1_iter)
   f1_iter = f1.child_to_iter(m1_iter)
m1 MODELO m1_iter

Adjunto parche. Saludos!

-- 
Aldrin Martoq
http://aldrinvideopodcast.podshow.com/
--- tv_fail.py	2008-11-13 21:58:59.000000000 -0300
+++ tv_fail_new.py	2008-11-13 22:00:56.000000000 -0300
@@ -15,15 +15,16 @@
     def _selected (self, tv, path, col):
         store, iter = tv.get_selection ().get_selected()
 
+	child_iter = self.filter.convert_iter_to_child_iter(iter)
         model = store.get_model()
-        model.set_value (iter, 0, 'New value...')
+        model.set_value (child_iter, 0, 'New value...')
     
     def init_model (self):
         store = gtk.TreeStore (gobject.TYPE_STRING)
         #        self.set_model (store)
         store.append(None, ['Valor inicial'])
 
-        filter = store.filter_new()
+        self.filter = filter = store.filter_new()
         filter.set_visible_func(self._visible_cb)
         self.set_model(filter)
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]