Problemas con gtk.TreeView

Milton inostroza minoztro en gmail.com
Jue Oct 27 03:55:26 CEST 2005


estimado: Recomiendo que te ordenaras, y cuando envies un código lo
envies con la indentacion adecuada, ya que ASI ES IMPOSIBLE Y/O MUY
DIFICIL DE LEER TU CODIGO :),

> #txtidAlumno = None
> class cargar_aplicacion:
> #global txtidAlumno
> def __init__(self):
> #Cargar la interface grafica desde el archivo de Glade
> self.ventana=gtk.glade.XML('estado_de_cuenta.glade')
> self.ventana.signal_autoconnect(self)
> self.btnCerrar = self.ventana.get_widget('btnCerrar')
> self.btnConsultar=self.ventana.get_widget('btnConsultar')
> self.txtidAlumno=self.ventana.get_widget('entry1')
> self.vista=self.ventana.get_widget('vista')
> #Crear el modelo para el gtkTreeView


yo llamaria a self.agregar_columnas() en el constructor de la clase.
despues de obviamente el conectar a base de datos

es decir la clase quedaría de esta forma:

class cargar_aplicacion:
   self.__init__(self):
     #tus definiciones de atributos
     self.conectar_base_datos(self)
     self.agregar_columnas()
     self.crear_modelo()


#aclaracion
el metodo agregar_columnas, efectivamente te agrega columnas a tu
gtk.treeview, pero sólo en la vista, es decir tienes que invocarlo una
sóla vez para que queden listas tus columnas (esto siempre y cuando no
quieras variar la vista), lo más común es que la definición de la
vista no cambie. yo definitivamente a ese metodo le pondría definir
vista y no agregar columnas.



>
> #Preparar el gtkTreeView
>
>
> #Conectar a la Base de Datos
> self.base = MySQLdb.connect(host="192.168.0.1 <http://192.168.0.1>
> ",user="usuario",passwd="---",
> db="cecobe")
> self.cursor=self.base.cursor()

trata de utilizar postgresql ;)

> def agregar_columnas(self):
> self.tvcolumn = gtk.TreeViewColumn("pagado",gtk.CellRendererText())
> self.tvcolumn1 = gtk.TreeViewColumn('importe',gtk.CellRendererText())
> self.tvcolumn2 = gtk.TreeViewColumn('referencia',gtk.CellRendererText())
> self.vista.append_column(self.tvcolumn)
> self.vista.append_column(self.tvcolumn1)
> self.vista.append_column(self.tvcolumn2)

suponiendo que esta bien esto,


> def on_btnCerrar_clicked(self,widget, *args):
> gtk.main_quit()
>
> def on_window_destroy(self,widget, *args):
> gtk.main_quit()
>
> def on_btnConsultar_clicked(self,widget, *args):

NO es necesario hacer esto cada vez que quieras consultar por algun
alumno, aca estas difiniendo un modelo nuevo cada vez que se invoca a
este metodo. Yo lo pondria en el constructor de la clase como
self.definir_modelo()
> self.store = self.liststore = gtk.ListStore(int,int,str)


> matricula= self.txtidAlumno.get_text()
> SQL = "SELECT pagado,cve_cargo,referencia FROM apf_relalumcargo WHERE
> cve_alumno=" + matricula
> self.cursor.execute(SQL)
> result = self.cursor.fetchall()

> for fila in result:
> items=([fila[0],fila[1],fila[2]])
> self.store.append(items)

fila ya es una lista, no tienes necesidad de volver a componerla o
utilizar un auxiliar

bastaria con esto:

for fila in result:
   self.store.append(fila)

Y bueno aca definitivamente creo que está tu error, estas volviendo a
ponerle una definicion de modelo a tu modelo que contenia datos, es
decir, le estas borrando los datos y dejandolo en blanco

> self.vista.set_model(self.liststore)

y un ultimo consejo utiliza GladeConnect o tepache para poder conectar
tus widget's, ya que realmente es una lata conectarlos uno por uno.

P.S.: si quieres borrar el contenido del modelo, sólo haces self.store.clear()

espero que me hayas entendido, salu2!!!

lee la documentacion de pygtk que es muy buena

--
Milton Inostroza Aguilera




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