[Olpc-uruguay] Actividad para llevar fichas personales de los alumnos
Gabriel Eirea
geirea en gmail.com
Mar Oct 12 18:47:10 EDT 2010
Mauricio:
Finalmente pude mirar este código. Te cuento lo que encontré.
En primer lugar, aunque un problema menor, el orden en que se pasan
los parámetros en
> cmdguardar.connect("clicked",self.guardar,datos,cargado,p,x,archivo)
es distinto al orden en que se reciben en
> def guardar(self,cmdguardar,p,x,cargado,datos,archivo):
Después, más importante, estás asumiendo que la línea
> datos=[txtnom.get_text() ,txtape.get_text(),txtdir.get_text(),txttel.
> get_text(),txtecu.get_text(),txteco.get_text(),txtder.get_text(),txttra.
> get_text(),txtmed.get_text(),txtcen.get_text(),txtfna.get_text(),txtfin.
> get_text(),txtpre.get_text(),txtper.get_text(),txtpos.get_text(),txtacu.
> get_text(),txtobs.get_text()]
define la variable datos antes de pasarla a la función guardar, pero
esto no es así. Esa línea se ejecuta una sola vez en __init__ cuando
los cuadros de texto todavía están vacíos.
La forma de solucionar esto es definir a todos los cuadros de texto
como pertencientes a la clase (es decir self.txtnom, etc.) y después
desde dentro de la función guardar incluir esa línea que carga los
valores en la variable datos.
Espero que esto te sirva.
Saludos y adelante,
Gabriel
El día 8 de octubre de 2010 12:57, amviera at adinet.com.uy
<amviera at adinet.com.uy> escribió:
> Les envío el código completo. Antes que lo lean les comento que estoy
> estudiando GTK en estos días y esto es mi primera experiencia, por lo
> que seguramente encontrarán que la manera de programar no es del todo
> adecuada, y que seguramente se puede resumir. Eso es lo que estoy
> estudiando actualmente.
>
> Gracias.
>
>
> #!/usr/bin/env python
>
> import os
> import pygtk
> pygtk.require('2.0')
> import gtk,sys
>
>
>
> p=[" "," "," "," "," "," "," "," "," "," "," "," "," ","
> "," "," "," "," "," "]
> x=1
> cargado="no"
> class hc:
> def __init__(self,p,x,cargado):
>
> datos=["","","","","","","","","","","","","","","","","","",""]
>
> abriendoagenda = open('agenda','r')
> registros = abriendoagenda.readlines()
> abriendoagenda.close()
> archivo = str(registros[x][43:-1]) + '.psi'
> datoagenda = registros[x]
> cantidadregistros=len(registros)-1
>
> # Se crea la ventana principal del programa
> window=gtk.Window(gtk.WINDOW_TOPLEVEL)
> window.set_border_width(10)
> window.connect("delete_event",gtk.main_quit)
> vbox=gtk.VBox()
> window.add(vbox)
> vbox.show()
>
>
>
> # Se crean los botones de la ventana principal
> cmdguardar=gtk.Button(label="Guardar")
> cmdnuevo=gtk.Button(label="Nuevo")
> cmdnuevo.connect("clicked",self.nuevo,p,x,cargado)
> cmdeliminar=gtk.Button(label="Eliminar")
> cmdeliminar.connect("clicked",self.eliminar,archivo,datoagenda,p,x,
> cargado)
> cmdsalir=gtk.Button(label="Salir")
> cmdsalir.connect("clicked",gtk.main_quit)
> cmdanterior=gtk.Button(label="Anterior")
> cmdanterior.connect("clicked",self.anterior,p,x,cargado)
> cmdsiguiente=gtk.Button(label="Siguiente")
> cmdsiguiente.connect("clicked",self.siguiente,p,x,cargado,
> cantidadregistros)
> cmdmostrar=gtk.Button(label="Mostrar")
> cmdmostrar.connect("clicked",self.mostrar,archivo,p,x,cargado)
> cmdnuevo.show()
> cmdsalir.show()
> cmdeliminar.show()
> cmdanterior.show()
> cmdsiguiente.show()
> cmdmostrar.show()
>
>
> # Se crean las cajas de texto y los respectivos nombres
> lblnom=gtk.Label("Nombre")
> lblape=gtk.Label("Apellido")
> lbldir=gtk.Label("Direccion")
> lbltel=gtk.Label("Tel")
> lblecu=gtk.Label("Escuela")
> lbleco=gtk.Label("Escolaridad")
> lblder=gtk.Label("Derivado por")
> lblmot=gtk.Label("Mot. consulta")
> lbltra=gtk.Label("Tratamientos")
> lblmed=gtk.Label("Mediciacion")
> lblcen=gtk.Label("Centro asis.")
> lblfna=gtk.Label("F. nacim.")
> lblfin=gtk.Label("F. ingreso")
> lblpre=gtk.Label("Ant. prenatal")
> lblper=gtk.Label("Ant. perinatal")
> lblpos=gtk.Label("Ant. postnatal")
> lblacu=gtk.Label("Acuerdos flia.")
> lblotr=gtk.Label("Otros datos")
> lblobs=gtk.Label("Observaciones")
> lblabr=gtk.Label("Abrir registro de")
> lblnom.show()
> lblape.show()
> lbldir.show()
> lbltel.show()
> lblecu.show()
> lbleco.show()
> lblder.show()
> lblmot.show()
> lbltra.show()
> lblmed.show()
> lblcen.show()
> lblfna.show()
> lblfin.show()
> lblpre.show()
> lblper.show()
> lblpos.show()
> lblacu.show()
> lblotr.show()
> lblobs.show()
> lblabr.show()
>
> txtnom=gtk.Entry(0)
> txtape=gtk.Entry(0)
> txtdir=gtk.Entry(0)
> txttel=gtk.Entry(0)
> txtecu=gtk.Entry(0)
> txteco=gtk.Entry(0)
> txtder=gtk.Entry(0)
> txtmot=gtk.Entry(0)
> txttra=gtk.Entry(0)
> txtmed=gtk.Entry(0)
> txtcen=gtk.Entry(0)
> txtfna=gtk.Entry(0)
> txtfin=gtk.Entry(0)
> txtpre=gtk.Entry(0)
> txtper=gtk.Entry(0)
> txtpos=gtk.Entry(0)
> txtacu=gtk.Entry(0)
> txtotr=gtk.Entry(0)
> txtobs=gtk.Entry(0)
> txtabr=gtk.Entry(0)
>
> txtnom.set_text(p[0][:-1])
> txtape.set_text(p[1][:-1])
> txtdir.set_text(p[2][:-1])
> txttel.set_text(p[3][:-1])
> txtecu.set_text(p[7][:-1])
> txteco.set_text(p[6][:-1])
> txtder.set_text(p[8][:-1])
> txtmot.set_text(p[9][:-1])
> txttra.set_text(p[11][:-1])
> txtmed.set_text(p[12][:-1])
> txtcen.set_text(p[10][:-1])
> txtfna.set_text(p[5][:-1])
> txtfin.set_text(p[4][:-1])
> txtpre.set_text(p[13][:-1])
> txtper.set_text(p[14][:-1])
> txtpos.set_text(p[15][:-1])
> txtacu.set_text(p[16][:-1])
> txtotr.set_text(p[17][:-1])
> txtobs.set_text(p[18][:-1])
> txtabr.set_text("Seleccione registro con los botones")
>
> txtnom.show()
> txtape.show()
> txtdir.show()
> txttel.show()
> txtecu.show()
> txteco.show()
> txtder.show()
> txtmot.show()
> txttra.show()
> txtmed.show()
> txtcen.show()
> txtfna.show()
> txtfin.show()
> txtpre.show()
> txtper.show()
> txtpos.show()
> txtacu.show()
> txtotr.show()
> txtobs.show()
> txtabr.show()
>
> hbox1=gtk.HBox()
> hbox1.pack_start(lblnom)
> hbox1.pack_start(txtnom)
> hbox1.pack_start(lblape)
> hbox1.pack_start(txtape)
> hbox1.pack_start(lbldir)
> hbox1.pack_start(txtdir)
> hbox1.show()
>
> hbox2=gtk.HBox()
> hbox2.pack_start(lbltel)
> hbox2.pack_start(txttel)
> hbox2.pack_start(lblfna)
> hbox2.pack_start(txtfna)
> hbox2.pack_start(lblfin)
> hbox2.pack_start(txtfin)
> hbox2.pack_start(lblmot)
> hbox2.pack_start(txtmot)
> hbox2.show()
>
> hbox3=gtk.HBox()
> hbox3.pack_start(lblder)
> hbox3.pack_start(txtder)
> hbox3.pack_start(lblecu)
> hbox3.pack_start(txtecu)
> hbox3.pack_start(lbleco)
> hbox3.pack_start(txteco)
> hbox3.show()
>
> hbox4=gtk.HBox()
> hbox4.pack_start(lblcen)
> hbox4.pack_start(txtcen)
> hbox4.pack_start(lbltra)
> hbox4.pack_start(txttra)
> hbox4.pack_start(lblmed)
> hbox4.pack_start(txtmed)
> hbox4.show()
>
> hbox5=gtk.HBox()
> hbox5.pack_start(lblpre)
> hbox5.pack_start(txtpre)
> hbox5.show()
>
>
> hbox6=gtk.HBox()
> hbox6.pack_start(lblper)
> hbox6.pack_start(txtper)
> hbox6.show()
>
> hbox7=gtk.HBox()
> hbox7.pack_start(lblpos)
> hbox7.pack_start(txtpos)
> hbox7.show()
>
> hbox8=gtk.HBox()
> hbox8.pack_start(lblacu)
> hbox8.pack_start(txtacu)
> hbox8.show()
>
> hbox9=gtk.HBox()
> hbox9.pack_start(lblotr)
> hbox9.pack_start(txtotr)
> hbox9.show()
>
> hbox10=gtk.HBox()
> hbox10.pack_start(lblobs)
> hbox10.pack_start(txtobs)
> hbox10.show()
>
>
> hbox11=gtk.HBox()
> hbox11.pack_start(cmdnuevo)
> hbox11.pack_start(cmdguardar)
> hbox11.pack_start(cmdeliminar)
> hbox11.pack_start(cmdsalir)
> hbox11.show()
>
> hbox12=gtk.HBox()
> hbox12.pack_start(lblabr)
> hbox12.pack_start(txtabr)
> hbox12.pack_start(cmdanterior)
> hbox12.pack_start(cmdsiguiente)
> hbox12.pack_start(cmdmostrar)
> hbox12.show()
>
> vbox.pack_start(hbox1)
> vbox.pack_start(hbox2)
> vbox.pack_start(hbox3)
> vbox.pack_start(hbox4)
> vbox.pack_start(hbox5)
> vbox.pack_start(hbox6)
> vbox.pack_start(hbox7)
> vbox.pack_start(hbox8)
> vbox.pack_start(hbox9)
> vbox.pack_start(hbox10)
> vbox.pack_start(hbox11)
> vbox.pack_start(hbox12)
>
> txtabr.set_text(registros[x][:-1])
>
> datos=[txtnom.get_text() ,txtape.get_text(),txtdir.get_text(),txttel.
> get_text(),txtecu.get_text(),txteco.get_text(),txtder.get_text(),txttra.
> get_text(),txtmed.get_text(),txtcen.get_text(),txtfna.get_text(),txtfin.
> get_text(),txtpre.get_text(),txtper.get_text(),txtpos.get_text(),txtacu.
> get_text(),txtobs.get_text()]
>
> #LO QUE SIGUE COMENTARIADO FUNCIONA Y GUARDA LOS DATOS SIN DAR
> #PROBLEMA, PERO AL PASARLO A GUARDAR DEJA DE FUNCIONAR.
> # g=open("tt","w")
> # for r in range (0,17):
> # g.write(datos[r]+'\n')
> # g.close()
>
> cmdguardar.connect("clicked",self.guardar,datos,cargado,p,x,archivo)
> cmdguardar.show()
>
>
> vbox.show()
> window.show()
>
>
> def mostrar(self,cmdsiguiente,archivo,p,x,cargado):
> abriendoregistro = open(archivo,'r')
> p = abriendoregistro.readlines()
> abriendoregistro.close()
> cargado="si"
> self. __init__(p,x,cargado)
>
>
> def siguiente(self,cmdsiguiente,p,x,cargado,cantidadregistros):
> if x < cantidadregistros:
> x=x+1
> cargado="no"
> self. __init__(p,x,cargado)
>
>
> def anterior(self,cmdanterior,p,x,cargado):
> if x > 1:
> x=x-1
> cargado="no"
> self. __init__(p,x,cargado)
>
>
> def nuevo(self,cmdnuevo,p,x,cargado):
> p=["","","","","","","","","","","","","","","","",""]
> cargado="no"
> self. __init__(p,x,cargado)
>
>
> def guardar(self,cmdguardar,p,x,cargado,datos,archivo):
> f=open("agenda",'r')
> lista1=f.readlines()
> f.close()
> # EN CASO DE ESTAR CREANDO UN REGISTRO NUEVO SE LE ASIGNA UN NOMBE
> DE ARCHIVO.
> # SI ES UN REGISTRO ANTERIOR MANTIENE EL MISMO NOMBRE.
> if cargado == "no":
> f=open("nombre_archivo",'r')
> archivo=f.readline(1)
> f.close()
> archivo = int(archivo) + 1
> f=open("nombre_archivo",'w')
> f.write(str(archivo))
> f.close()
> archivo = str(archivo) + ".psi"
> # GUARDO LOS DATOS DEL REGISTRO CREADO O MODIFICADO
> f=open(archivo,'w')
> for v in range(0,17):
> f.write(datos[v]+'\n')
> f.close()
> # SOLO SE MODIFICA LA AGENDA CUANDO SE CREA UN NUEVO REGISTRO
> if cargado == "no":
> # EN CASO DE QUE SE MODIFIQUE EL NOMBRE Y/O APELLIDO DEBE
> MODIFICARSE EL ARCHIVO AGENDA
> # TAMBIEN SE MODIFICA AL CREAR UN ARCHIVO NUEVO
> datos[0]=datos[0]+" "
> datos[1]=datos[1]+" "
> nuevo=datos[0][:10]+" "+datos[1][:15]+" No. de ingreso: "+archivo[:
> -4]
> nombreantiguo = " No. de ingreso: "+archivo[:-4]+"\n"
> f=open("agenda",'w')
> for x in range (len(lista1)):
> # EN CASO DE QUE SE MODIFIQUE NOMBRE Y/O APELLIDO NO DEBE QUEDAR
> DUPLICADO EL REGISTRO
> # EN EL ARCHIVO AGENDA CON LOS DOS NOMBRES
> if lista1[x][26:] == nombreantiguo:
> lista1[x] = ""
> # SE GUARDAN LOS DATOS EN ORDEN ALFABETICO
> if nuevo < lista1[x]:
> f.write(nuevo+'\n')
> for z in range(x,len(lista1)):
> f.write(lista1[z])
> f.close()
> elif nuevo > lista1[x]:
> f.write(lista1[x])
> f.write(nuevo+'\n')
> f.close()
> self. __init__(p,x,cargado)
>
>
>
>
>
>
> def eliminar(self,cmdsiguiente,archivo,datoagenda,p,x,cargado):
> # SE ELIMINA UN REGISTRO DADO. PARA ELLO SE CAMBIA LA EXTENSION A .BAK
> # LO CUAL POSIBILITA RECUPERAR LOS DATOS.
> if cargado == "si":
> os.system("mv "+archivo+" "+archivo[:-4]+".bak")
> f=open("agenda",'r')
> lista=f.readlines()
> f.close()
> f=open("agenda",'w')
> for v in range(len(lista)):
> if lista[v] <> datoagenda:
> f.write(lista[v])
> f.close()
> p=["","","","","","","","","","","","","","","","",""]
> x=0
> self. __init__(p,x,cargado)
>
>
> def main():
> gtk.main()
> # return 0
>
> if __name__ == "__main__":
> hc(p,x,cargado)
> main()
>
>
>
More information about the Olpc-uruguay
mailing list