Mundo em Python

Agenda de Contactos

from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
def Database():
global conn, cursor
conn = sqlite3.connect("contactos_agenda.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS REGISTRATION (
RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
NOME TEXT,
CONTACTO TEXT
)
""")
conn.commit()
def DisplayForm():
root = Tk()
root.geometry("900x500")
root.title("Agenda de Contactos")
global tree
global SEARCH
global nome, contacto
SEARCH = StringVar()
nome = StringVar()
contacto = StringVar() TopViewForm = Frame(root, width=600, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X) LFrom = Frame(root, width=350, bg="#15244C")
LFrom.pack(side=LEFT, fill=Y) LeftViewForm = Frame(root, width=500, bg="#0B4670")
LeftViewForm.pack(side=LEFT, fill=Y) MidViewForm = Frame(root, width=600)
MidViewForm.pack(side=RIGHT) lbl_text = Label(TopViewForm, text="Agenda de Contactos", font=('Verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X) Label(LFrom, text="Nome", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP, pady=(10, 0))
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=nome).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Contacto", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP, pady=(10, 0))
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=contacto).pack(side=TOP, padx=10, fill=X) Button(LFrom, text="Submeter", font=("Arial", 10, "bold"), bg="#15244C", fg="white", command=register).pack(
side=TOP, padx=10, pady=5, fill=X) lbl_txtsearch = Label(LeftViewForm, text="Digite o Nome", font=('Verdana', 10), bg="#0B4670", fg="white")
lbl_txtsearch.pack(pady=(20, 5)) search = Entry(LeftViewForm, textvariable=SEARCH, font=('Verdana', 15), width=10)
search.pack(side=TOP, padx=10, fill=X) btn_search = Button(LeftViewForm, text="Pesquisar", command=SearchRecord, bg="cyan")
btn_search.pack(side=TOP, padx=10, pady=10, fill=X) btn_view = Button(LeftViewForm, text="Ver Tudo", bg="cyan", command=DisplayData)
btn_view.pack(side=TOP, padx=10, pady=10, fill=X) btn_Limpar = Button(LeftViewForm, text="Limpar", bg="cyan", command=limpar)
btn_Limpar.pack(side=TOP, padx=10, pady=10, fill=X) btn_apagar = Button(LeftViewForm, text="Apagar", bg="cyan", command=apagar)
btn_apagar.pack(side=TOP, padx=10, pady=10, fill=X) btn_actualizar = Button(LeftViewForm, text="Actualizar", bg="cyan", command=actualizacao)
btn_actualizar.pack(side=TOP, padx=10, pady=10, fill=X) # Configurar scrollbars
scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
scrollbary = Scrollbar(MidViewForm, orient=VERTICAL) tree = ttk.Treeview(MidViewForm, columns=("RID", "Nome", 'Contacto'),
selectmode="extended", height=100,
yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set) scrollbary.config(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y) scrollbarx.config(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X) tree.heading('RID', text="ID", anchor=W)
tree.heading('Nome', text="Nome", anchor=W)
tree.heading('Contacto', text="Contacto", anchor=W) tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('RID', stretch=NO, minwidth=0, width=100)
tree.column('Nome', stretch=NO, minwidth=0, width=150)
tree.column('Contacto', stretch=NO, minwidth=0, width=150) tree.pack() # Ligar o evento apenas uma vez
tree.bind("<Double-1>", OnDoubleClick) DisplayData()
root.mainloop()
def SearchRecord():
Database()
if SEARCH.get() != "":
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION WHERE NOME LIKE ?", ('%' + str(SEARCH.get()) + '%',))
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def register():
Database()
vnome = nome.get()
vcontacto = contacto.get()
if vnome == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Por favor, preenche todos os campos!")
else:
try:
conn.execute('INSERT INTO REGISTRATION (NOME, CONTACTO) VALUES (?, ?)', (vnome, vcontacto))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Contacto adicionado com sucesso")
DisplayData()
limpar()
except Exception as e:
tkMessageBox.showerror("Erro", f"Não foi possível adicionar o contacto: {e}")
finally:
conn.close()
def actualizacao():
Database()
vnome = nome.get()
vcontacto = contacto.get()
if vnome == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Por favor, preenche todos os campos!")
else:
try:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
if selecteditem:
conn.execute('UPDATE REGISTRATION SET NOME=?, CONTACTO=? WHERE RID=?',
(vnome, vcontacto, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Mensagem", "Actualizado com sucesso")
limpar()
DisplayData()
else:
tkMessageBox.showwarning("Atenção", "Não foi selecionado nenhum contacto para actualizar")
except Exception as e:
tkMessageBox.showerror("Erro", f"Não foi possível actualizar o contacto: {e}")
finally:
conn.close()
def apagar():
Database()
if not tree.selection():
tkMessageBox.showwarning("Atenção", "Seleciona o contacto a eliminar")
else:
result = tkMessageBox.askquestion('Confirmar', 'Desejas eliminar o registo de contacto?',
icon="warning")
if result == 'yes':
try:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
if selecteditem:
tree.delete(curItem)
conn.execute("DELETE FROM REGISTRATION WHERE RID = ?", (selecteditem[0],))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Contacto eliminado com sucesso")
except Exception as e:
tkMessageBox.showerror("Erro", f"Não foi possível eliminar o contacto: {e}")
finally:
conn.close()
def limpar():
tree.delete(*tree.get_children())
DisplayData()
SEARCH.set("")
nome.set("")
contacto.set("")
def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def OnDoubleClick(event):
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
if selecteditem:
nome.set(selecteditem[1])
contacto.set(selecteditem[2])
if __name__ == '__main__':
DisplayForm()
0