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