codigo de treeview con liststore, problemas

Cristhian Boujon cristhianboujon en gmail.com
Sab Jun 7 23:34:32 CEST 2008


El día 6 de junio de 2008 16:19, Milton Galo Patricio Inostroza Aguilera <
minoztro en gmail.com> escribió:

> 2008/6/6 Cristhian Boujon <cristhianboujon en gmail.com>:
> > Hace rato que vengo peleandome con esto. Es un treeview y lo que busco en
> > este momento es poder hacer que las celdas sean editables. Aca va el
> codigo:
> >
> > import gtk
> > import gtk.glade
> > import gobject
> >
> > modelo = gtk.ListStore (int, str, int, int)
> > treeview = gtk.glade.XML('untitled1.glade').get_widget('treeview1')
> > treeview.set_model(modelo)
> > render=gtk.CellRendererText()
> >
> > column1=gtk.TreeViewColumn("Cant.",render,text=0)
> > treeview.append_column (column1)
>
> Ok, de acuerdo.
>
> >
> > column2=gtk.TreeViewColumn("Detalle",render,text=1)
> > treeview.append_column(column2)
>
> El detalle lo dejaras para que ingresen cualquier cosa?...oumm no
> estoy muy de acuerdo contigo acá debiera ir un combobox el cual
> permite elegir el producto que está en la base de datos...no lo crees?
>
> >
> > column3=gtk.TreeViewColumn("P. Unitario",render, text=2)
> > treeview.append_column(column3)
>
> Esto lo debiera sacar como consecuencia del producto elegido
>
> >
> > column4=gtk.TreeViewColumn("Total",render,text=3)
> > treeview.append_column(column4)
>
> Y eso lo debiera calcular tomando el precio unitario * la cantidad del
> producto
> Existe un problema con enviar el mismo objeto a diversas columnas del
> treeview...no me acuerdo cual era pero cuando yo lo quise hacer, sufrí
> comportamientos extraños.
>
> >
> > for i in range(10):
> >    modelo.append()
> >
> > def edited(render,path,new_text,modelo):          #path: es el camino de
> > árbol a la fila que contiene la celda editada
> >    modelo[path][0] = new_text
> >    return
> >
> > render.set_property('editable', True)
>
> ahora fijate que acá le puedes enviar el indice de la columna, lo
> puedes ingresar despues de modelo y lo manejas en tu handler
>
> > render.connect('edited', edited, modelo)
>
> No se tu, pero yo no estoy de acuerdo en implementar una misma función
> para campos que a simple vista no hacen lo mismo...aunque exista la
> opción de enviarle el indice de la columna...recuerda que en python
> simple is good.
>
> >
> > gtk.main()
> >
> >
> > Para evitar ser muy extenso me gustaria que prueben el codigo ustedes
> mismos
> > para que vean lo que pasa. El problema está en la funcion edited porque
> no
> > se como "decirle" la celda a modificar.  ser Como ya les dije, la idea es
> > que pueda editar cualquier celda, por el momento.
>
> Cual es el problema en usar el código que te pasé
> anteriormente?...quizás puede que esté feo o no te guste, pero de que
> funciona, si lo hace!...quizás lo puedas hermosear y dejar como a ti
> te guste.
>
> Para lograr un funcionamiento como una hoja de cálculo quizás sea
> mejor utilizar calc de openoffice o ver por ahí si existe un widget de
> hoja de cálculo o quizás sea lindo hacer uno :)
>
> >
> > --
> > Cristhian A. Boujon
> > _______________________________________________
> > Lista de correo Python-es
> > http://listas.aditel.org/listinfo/python-es
> > FAQ: http://listas.aditel.org/faqpyes
> >
>
> Milton, gracias por la respuesta, mira:

column2=gtk.TreeViewColumn("Detalle",render,text=1)
> treeview.append_column(column2)

El detalle lo dejaras para que ingresen cualquier cosa?...oumm no
estoy muy de acuerdo contigo acá debiera ir un combobox el cual
permite elegir el producto que está en la base de datos...no lo crees?

column4=gtk.TreeViewColumn("Total",render,text=3)
> treeview.append_column(column4)

Y eso lo debiera calcular tomando el precio unitario * la cantidad del
producto
Existe un problema con enviar el mismo objeto a diversas columnas del
treeview...no me acuerdo cual era pero cuando yo lo quise hacer, sufrí
comportamientos extraños.

Sí, tenia pensado hacerlo en una version futura. Pero en principio hacer la
"base" del sistema.


> render.connect('edited', edited, modelo)

No se tu, pero yo no estoy de acuerdo en implementar una misma función
para campos que a simple vista no hacen lo mismo...aunque exista la
opción de enviarle el indice de la columna...recuerda que en python
simple is good.

como propondrias de hacerlo? en principio solo quiero que todas las celdas
sean editables, eso es lo que me importa por el momento

No hay problemas con tu codigo, pero todo esto lo hago con el fin de
aprender y no es un trabajo que tenga que hacer para la facultad o para una
empresa, por eso es que quiero hacer todo yo y entender todo íntegro.
-- 
Cristhian A. Boujon
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es