Manejador de Agenda Telefonica: Aportación Propia (Unidad 3)

El dia de hoy les traigo una entrega nueva, en esta ocación mostrare un pequeño proyecto en el cual he estado trabajando, no es nada robusto ni vistozo pero sirve de ejemplo de clase para el manejo de archivos.

Para este caso desarrolle un pequeño gestor de contactos, una especie de agenda que permite almacenar los registros en archivos .csv y a su vez en formatos .txt, ademas de facilirtar su lectura en el programa una vez guardado el documento.

Capturas:








Codigo:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
import tkFileDialog
import tkMessageBox

def mensajes(opc):
    if opc==1:
        tkMessageBox.showinfo("Desarrollador", "Nombre: Ambrocio Isaias Laureano Castro\n"
                                               "Matricula: 16260626\n"
                                               "Carrera: Ing. En Sistemas Computacionales\n"
                                               "Materia: Graficación\n"
                                               "Maestra: Maria Yolanda Rodriguez Loya")
    if opc==2:
        tkMessageBox.showinfo("Frase", "Todo hombre fuerte fue debil alguna vez, asi que la proxima vez que lo pienses no me subestimes"
                                       " que aun estoy en el juego")
    if opc==3:
        tkMessageBox.showinfo("Decifralo",
                              "Zwkpw si dmzlil icu bm itw, bm ycpmzw g bm mfbzivw. Ap sw lmakpnziabm lpsm ycm si ycpmzw, g ap, mabw ma ail, xmzw uw upmñw tpa amubptpmubwa :D")
#-------------------------Funcionalidades del menu-------------------------------
def guardar():
    global ArchivodeTrabajo, Tabla
    if ArchivodeTrabajo=="":
        GuardarComo(2)
        main.title("Lector de informacion "+ArchivodeTrabajo)
    sobreescribir()

def formatear():
    global ArchivodeTrabajo,Tabla
    if ArchivodeTrabajo!="":
        file = archivo_en_uso("r")
        contenido = file.read()
    if (ArchivodeTrabajo!="" and contenido!=""):
        accion = tkMessageBox.askyesno("Advertencia","Estas apunto de eliminar el contenido del archivo por completo ¿Deseas continuar?")
        if accion==True:
            borrarcontenido()
            limpiar(1)
    else:
        tkMessageBox.showinfo("Advertencia","Este archivo no posee contendio y/o no ha sido guardado con anterioridad")

def salir():
    global main
    accion = tkMessageBox.askyesno("Advertencia",
                                   "¿Seguro que desea cerrar el programa?\n Todos los cambios no guardados se perderan")
    if accion == True:
        main.destroy()

#--------------------------Metodos de control de archivo-------------------------

def archivo_en_uso(permiso):
    global  ArchivodeTrabajo
    archivo_en_uso=open(ArchivodeTrabajo,permiso)
    return archivo_en_uso

def leer():
    global Tabla
    Tabla.delete("1.0", END)
    file=archivo_en_uso("r")
    contenido=file.read()
    var_temp =["","",""]
    control=0  #0 Para nombre, 1 para apellido, 2 para telefono
    for i in range(len(contenido)-1):
        #print contenido[i]," = ",ord(contenido[i])," control: ",str(control)
        if contenido[i]=="," and contenido[i+1]==" ":
            control=control+1
        elif contenido[i]=="\n":
            control=0
            Tabla.insert(INSERT, "\t\t" + str(var_temp[0]) + "\t\t\t\t\t" + str(var_temp[1]) + "\t\t\t\t\t" + str(
                var_temp[2]) + " \n")
            var_temp[0]="";var_temp[1]="";var_temp[2]=""
        elif contenido[i]!="," or contenido[i]!=" ":
            var_temp[control] = var_temp[control] + contenido[i]
    file.close()

def sobreescribir():
    global Tabla
    file = archivo_en_uso("w")
    contenido = Tabla.get("1.0", END)
    var_temp = ""
    for i in range(len(contenido)):
        if contenido[i] == "\t" and contenido[i - 1] != "\t" and contenido[i - 1] != "\n":
            var_temp = var_temp + ","
        elif contenido[i] != "\t":
            var_temp = var_temp + str(contenido[i])
    file.write(var_temp)
    file.close()
    print "Datos Agregados Correctamente"

def borrarcontenido():
    file=archivo_en_uso("w")
    file.close()
    print "Contenido Borrado Correctamente"

#---------------------------Metodos para manejor de directorios------------------
def nuevo():
    global ArchivodeTrabajo
    if (ArchivodeTrabajo=="" and Tabla.get("2.0",END)!="\n") or (ArchivodeTrabajo!="" and Tabla.get("2.0",END)!="\n"):
        accion=tkMessageBox.askyesno("Advertencia","Estas a punto de abrir un nuevo documento, cualquier cambio no guardado en el documento actual se perdera ¿Deseas continuar?")
        if accion==True:
            ArchivodeTrabajo = ""
            limpiar(1)
            main.title("Lector de informacion: Nuevo Documento")
    else:
        ArchivodeTrabajo = ""
        limpiar(1)
        main.title("Lector de informacion: Nuevo Documento")

def abrir():
    global ArchivodeTrabajo, main
    filename = tkFileDialog.askopenfilename(initialdir="/", title="Select file",filetypes=(("Archivos de Excel", "*.csv"), ("all files", "*.*")))
    ArchivodeTrabajo=filename
    leer()
    main.title("Lector de informacion "+ArchivodeTrabajo)
    print ArchivodeTrabajo

def GuardarComo(opc):
    global  ArchivodeTrabajo
    filename = tkFileDialog.asksaveasfile(mode="a",title="Guardar Como",filetypes=(("Archivos de Excel", "*.csv"), ("Archivos de Texto", "*.txt"),("Todos los archivos","*.*")),defaultextension=".csv")
    ArchivodeTrabajo=filename.name
    if opc==1:
        main.title("Lector de informacion "+ArchivodeTrabajo)
        sobreescribir()

#Metodos De los Botones---------------------------------------------------------
def Agregar(nombre,apellido,telefono):
     global Tabla
     Tabla.insert(INSERT,"\t\t"+str(nombre.get())+"\t\t\t\t\t "+str(apellido.get())+"\t\t\t\t\t "+str(telefono.get())+" \n")

def limpiar(opc):
    global Tabla,Vnombre,Vapellido,Vtelefono
    if opc==1:
        Tabla.delete("1.0",END)
    Vnombre.set("")
    Vapellido.set("")
    Vtelefono.set("")

#----------------------------Funcion Main----------------------------------------

ArchivodeTrabajo=""
main = Tk()
main.title("Lector de informacion: Nuevo Documento")
Vnombre = StringVar()
Vapellido = StringVar()
Vtelefono = StringVar()
"""Declaracion del menu"""
menu = Menu(main)
main.config(menu=menu)
archivo = Menu(menu, tearoff=0)
archivo.add_command(label="Nuevo", command=nuevo)
archivo.add_command(label="Abrir", command=abrir)
archivo.add_command(label="Guardar", command=guardar)
archivo.add_command(label="Guardar Como", command=lambda : GuardarComo(1))
archivo.add_command(label="Formatear Archivo", command=formatear)
archivo.add_separator()
archivo.add_command(label="Salir",command=salir)
Acerca_De = Menu(menu, tearoff=0)
"""Agregar Opcion Principal a la Barra"""
menu.add_cascade(label="Archvio", menu=archivo)
Acerca_De.add_command(label="Autor", command=lambda :mensajes(1))
Acerca_De.add_command(label="Frase", command=lambda : mensajes(2))
Acerca_De.add_command(label="Decifralo",command=lambda : mensajes(3))
menu.add_cascade(label="Acerca de",menu=Acerca_De)
# -------------------------------------

contenedor = Frame(main, width=1000, height="520").pack()
# Declaracion de Elementos graficos
titulo = Label(contenedor, text="Servicio de Agenda", font=("Arial", 20), fg="black").place(x=375, y=0)
ENombre = Label(contenedor, text="Nombre: ", font=("Arial", 12), fg="black").place(x=10, y=50)
CNombre = Entry(contenedor, textvariable=Vnombre, font=("Arial", 12), fg="black", width=20).place(x=90, y=51)
EApellido = Label(contenedor, text="Apellido: ", font=("Arial", 12), fg="black").place(x=10, y=90)
CApellido = Entry(contenedor, textvariable=Vapellido, font=("Arial", 12), fg="black", width=20).place(x=90, y=91)
ETelefono = Label(contenedor, text="Telefono: ", font=("Arial", 12), fg="black").place(x=10, y=130)
CTelefono = Entry(contenedor, textvariable=Vtelefono, font=("Arial", 12), fg="black", width=20).place(x=90, y=131)
frame = Frame(contenedor)
frame.place(x=10, y=170)
Ttabla=Label(frame,text="Nombre\t\t\t\t          Apellido\t\t\t\tTelefono",font=("Arial", 12) ,fg="black")
Ttabla.pack(side=TOP,fill=X)
Tabla = Text(frame, width=120, height=20)
Tabla.pack(side=LEFT)
scrool = Scrollbar(frame, command=Tabla.yview)
scrool.pack(side=RIGHT, fill=Y)
Tabla.config(yscrollcommand=scrool.set)
BAgregar = Button(contenedor, text="Agregar", command=lambda: Agregar(Vnombre, Vapellido, Vtelefono)).place(x=300, y=50)
BLimpiar = Button(contenedor, text="Limpiar", command=lambda: limpiar(2)).place(x=300, y=100)
main.mainloop()


Comentarios