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…
no me ejecutar el ejemplo : Agenda Telefónica retro con python + csv + click + pythondialog.
que debo hacer para que me funcione?
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.