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

amviera en adinet.com.uy amviera en adinet.com.uy
Vie Oct 8 10:57:47 EDT 2010


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