[Olpc-uruguay] Actividad para llevar fichas personales de los alumnos

amviera en adinet.com.uy amviera en adinet.com.uy
Mar Oct 12 19:24:32 EDT 2010


Muchas gracias Gabriel.

Te cuento que con eso se solucionó el problema. Definì todos los 
cuadros de texto como pertenecientes a la clase, anteponiendo self. a 
cada uno de ellos. La variable datos la declaro dentro de la función 
guardar. 

Ahora con eso ya funciona. 

Además eliminé unas cuantas de esas variables (x, p, archivo) ya que 
encontré formas más adecuadas de trabajar con los datos. Y me di cuenta 
de que necesito otros dos botones que estarìa incluyendo próximamente: 
uno de ellos debería abrir un control TextView para poder escribir allí 
todo tipo de anotaciones respecto a cada niño e incluso elaborar los 
informes correspondientes cada vez que sean solicitados. Y un segundo 
botón que permita respaldar todos los archivos comprimiéndolos y 
guardándolos en un pendrive por ejemplo. 

Al menos lo que ya está funcionando se puede utilizar y lo voy a subir 
ya que quizà pueda resultarle útil a varios docentes. En mi caso lo 
necesito mucho, ya que recibo niños de diversas escuelas y generalmente 
debo realizar informes de evaluación y de evoloución de cada uno de 
ellos. 

Gracias, Mauricio Viera.


>----Mensaje original----
>De: geirea en gmail.com
>Fecha: 12/10/2010 19:47 
>Para: "amviera en adinet.com.uy"<amviera en adinet.com.uy>
>CC: "Comunidad ceibalJAM"<olpc-uruguay en lists.laptop.org>, 
<fdanesse en gmail.com>
>Asunto: Re: [Olpc-uruguay] Actividad para llevar fichas personales de 
los alumnos
>
>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 en adinet.com.uy
><amviera en 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