[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