3

Agenda Telefónica retro con python + csv + click + pythondialog

Aqui se pone en practica lo aprendido en el curso de python 2019.

Usando click para generar el comando. pythondialog para las ventanas y csv para la permanencia de datos.

En el codigo se declara la clase contacto con un método estatico objects que obtiene todos los objetos de la base de datos. Un metodo save para agregar o actualizar contactos y el método delete para borrar contactos.

La libreria de ventanas pythondialog tiene usa serie de widgets ya creados puedes revizar la documentacion oficial

El modulo os solo se está usando para verificar la existencia del archivo csv que funciona como base de datos. De no existir el archivo se crea en blanco.

Sin más el código. Recomiendo haber terminado el curso antes de ojear este material.

import csv
import click
from dialog import Dialog
import os


classContact(object):def__init__(self, name, number):
        self.name = name
        self.number = number

    @staticmethoddefobjects():
        contacts = []
        with open('.contacts.csv') as database:
            for contact in csv.DictReader(database, ['name', 'number']):
                contacts.append(contact)
        return contacts

    defto_dict(self):return {'name': self.name, 'number': self.number}

    defsave(self):
        contacts = self.objects()
        with open('.contacts.csv', 'w') as database:
            print(contacts)
            encontrado = Falsefor c in contacts:
                if c['number'] == self.number:
                    encontrado = True
                    c['name'] = self.name
            ifnot encontrado:
                contacts.append(self.to_dict())
            writer = csv.DictWriter(database, ['name', 'number'])
            writer.writerows(contacts)

    defdelete(self):
        contacts = self.objects()
        new_contacts = contacts.copy()
        with open('.contacts.csv', 'w') as database:
            uid = Nonefor i, c in enumerate(contacts):
                if c['number'] == self.number:
                    uid = i
            if uid or uid == 0:
                new_contacts.pop(uid)
            writer = csv.DictWriter(database, ['name', 'number'])
            print(new_contacts)
            writer.writerows(new_contacts)


defListContacts():
    window = Dialog()
    text = ""for c in Contact.objects():
        text += "|{}|{}|\n".format(c['name'].ljust(25), c['number'].rjust(25))
    list = window.scrollbox(text)
    main()


defSelectContacts(title):'''seleccionar una lista de numeros de telefonos'''
    window = Dialog()
    return window.buildlist(title, 0, 0, 0,
                            [(contact['number'], contact['name'] + " - " + contact['number'],
                              False) for contact in
                             Contact.objects()])


defSelectContact():'''seleccionar solo un numero de telefono'''
    window = Dialog()
    options = [(contact['number'] + '|' +contact['name'], '') for contact in Contact.objects()]
    return window.menu('SELECCIONA UN CONTACTO', 0, 0, 0, options)


defContactForm(number="", name=""):
    window = Dialog()
    return window.form("NUEVO CONTACTO", [
        ("NUMERO TELEFÓNICO", 1, 1, number, 1, 25, 25, 25),
        ("NOMBRE DEL CONTACTO", 2, 1, name, 2, 25, 25, 25)
    ], 0, 0, 0)


@click.command()defmain():'''
    Agenda de Contactos Retro. Práctica del curso de python
    '''ifnot os.path.exists('.contacts.csv'):
        f = open('.contacts.csv', 'w+')
        f.close()

    window = Dialog()
    exit_info, tag, text = window.inputmenu('MENU PRINCIPAL', 0, 0, 15, [
        ('L', 'Lista de Contactos'),
        ('N', 'Nuevo Contacto'),
        ('E', 'Editar Contacto'),
        ('B', 'Borrar Contacto'),
        ('S', 'Salir'),
    ])

    if tag == 'L':
        ListContacts()
    elif tag == 'B':
        code, numbers = SelectContacts('SELECCIONE LOS CONTACTOS QUE DESEA ELIMINAR')
        if code == 'ok':
            for n in numbers:
                c = Contact("", n)
                c.delete()
    elif tag == 'N':
        code, data = ContactForm()
        if code == 'ok':
            contact = Contact(data[1], data[0])
            contact.save()
    elif tag == 'E':
        code, contact = SelectContact()
        if code == 'ok':
            code , data = ContactForm(contact.split("|")[0], contact.split("|")[1])
            if code == 'ok':
                edited_contact = Contact(data[1], data[0])
                edited_contact.save()
    elif tag == 'S':
        return0
    main()

Algunas Capturas…
Captura de pantalla de 2019-03-07 20-22-21.png
Captura de pantalla de 2019-03-07 20-23-23.png
Captura de pantalla de 2019-03-07 20-23-38.png
Captura de pantalla de 2019-03-07 20-23-55.png
Captura de pantalla de 2019-03-07 20-24-12.png

Escribe tu comentario
+ 2
1
4258Puntos
3 años

no me ejecutar el ejemplo : Agenda Telefónica retro con python + csv + click + pythondialog.
que debo hacer para que me funcione?

1
72Puntos
5 años

If you are a learner of windows 10 OS computer system then this post is for you guys change pc name in windows 10 with the help of this homepage you get to know how to change computer name.