Mundo em Python

Contactos Telefónicos (CRUD usando Tkinter )

from tkinter import*
import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
root = Tk()
root.title("Contactos Telefónicos ")
width = 900
height = 500


def Database():
global conn, cursor
conn = sqlite3.connect('contacto.db')
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, primeironome TEXT, ultimonome TEXT,"
" telefone TEXT, telemovel TEXT, email TEXT, obs TEXT)") def acrescentar():
if PRIMEIRONOME.get() == "" or ULTIMONOME.get() == "" or TELEFONE.get() == "" or TELEMOVEL.get() == "" or EMAIL.get() == "" \
or OBS.get() == "":
txt_result.config(text="Por favor, complete o formulário!", fg="red")
else:
Database()
cursor.execute("INSERT INTO `member` (primeironome, ultimonome, telefone, telemovel, email, obs) VALUES(?, ?, ?, ?, ?, ?)",
(str(PRIMEIRONOME.get()), str(ULTIMONOME.get()), str(TELEFONE.get()), str(TELEMOVEL.get()),
str(EMAIL.get()), str(OBS.get())))
tree.delete(*tree.get_children())
cursor.execute("SELECT * FROM `member` ORDER BY `primeironome` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5], data[6]))
conn.commit()
PRIMEIRONOME.set("")
ULTIMONOME.set("")
TELEFONE.set("")
TELEMOVEL.set("")
EMAIL.set("")
OBS.set("")
cursor.close()
conn.close()
txt_result.config(text="Registro criado!", fg="green") def ler():
tree.delete(*tree.get_children())
Database()
cursor.execute("SELECT * FROM `member` ORDER BY `primeironome` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5], data[6]))
cursor.close()
conn.close()
txt_result.config(text="Mostrar todos os dados", fg="black")
def actualiza():
Database()
tree.delete(*tree.get_children())
cursor.execute("UPDATE `member` SET `primeironome` = ?, `ultimonome` = ?, `telefone` =?, `telemovel` = ?, `email` = ?, `obs` = ? WHERE `mem_id` = ?",
(str(PRIMEIRONOME.get()), str(ULTIMONOME.get()), str(TELEFONE.get()), str(TELEMOVEL.get()), str(EMAIL.get()), str(OBS.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `primeironome` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5], data[6]))
cursor.close()
conn.close()
PRIMEIRONOME.set("")
ULTIMONOME.set("")
TELEFONE.set("")
TELEMOVEL.set("")
EMAIL.set("")
OBS.set("")
btn_criar.config(state=NORMAL)
btn_ler.config(state=NORMAL)
btn_actualizacao.config(state=DISABLED)
btn_apagar.config(state=NORMAL)
txt_result.config(text="Actualizado com sucesso", fg="green") def OnSelected(event):
global mem_id;
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
mem_id = selecteditem[0]
PRIMEIRONOME.set("")
ULTIMONOME.set("")
TELEFONE.set("")
TELEMOVEL.set("")
EMAIL.set("")
OBS.set("")
PRIMEIRONOME.set(selecteditem[1])
ULTIMONOME.set(selecteditem[2])
TELEFONE.set(selecteditem[3])
TELEMOVEL.set(selecteditem[4])
EMAIL.set(selecteditem[5])
OBS.set(selecteditem[6])
btn_criar.config(state=DISABLED)
btn_ler.config(state=DISABLED)
btn_actualizacao.config(state=NORMAL)
btn_apagar.config(state=DISABLED) def eliminar():
if not tree.selection():
txt_result.config(text="Por favor, seleciona um contacto", fg="red")
else:
result = tkMessageBox.askquestion('Aplicação', 'Deseja apagar o contacto?', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
Database()
cursor.execute("DELETE FROM `member` WHERE `mem_id` = %d" % selecteditem[0])
conn.commit()
cursor.close()
conn.close()
txt_result.config(text="Apagado com sucesso", fg="green") def sair():
result = tkMessageBox.askquestion('Contactos Telefónicos', 'Deseja sair do programa?', icon="warning")
if result == 'yes':
root.destroy()
exit()
root.geometry('%dx%d' % (width, height))
root.resizable(0, 0)
Top = Frame(root, width=900, height=50, bd=8, relief="raise")
Top.pack(side=TOP)
Left = Frame(root, width=300, height=500, bd=8, relief="raise")
Left.pack(side=LEFT)
Right = Frame(root, width=600, height=500, bd=8, relief="raise")
Right.pack(side=RIGHT)
Forms = Frame(Left, width=300, height=450)
Forms.pack(side=TOP)
Buttons = Frame(Left, width=300, height=100, bd=8, relief="raise")
Buttons.pack(side=BOTTOM) txt_titulo = Label(Top, width=900, font=('arial', 24), text ="Lista de Contactos")
txt_titulo.pack()
txt_primeironome = Label(Forms, text="Primeiro Nome: ", font=('arial', 16), bd=15)
txt_primeironome.grid(row=0, sticky="e")
txt_ultimonome = Label(Forms, text="Último nome: ", font=('arial', 16), bd=15)
txt_ultimonome.grid(row=1, sticky="e")
txt_telefone = Label(Forms, text="Número de Telefone: ", font=('arial', 16), bd=15)
txt_telefone.grid(row=2, sticky="e")
txt_telemóvel = Label(Forms, text="Número de Telemóvel: ", font=('arial', 16), bd=15)
txt_telemóvel.grid(row=3, sticky="e")
txt_email = Label(Forms, text="Email: ", font=('arial', 16), bd=15)
txt_email.grid(row=4, sticky="e")
txt_obs = Label(Forms, text="Observações: ", font=('arial', 16), bd=15)
txt_obs.grid(row=5, sticky="e")
txt_result = Label(Buttons)
txt_result.pack(side=TOP) PRIMEIRONOME = StringVar()
ULTIMONOME = StringVar()
TELEFONE = StringVar()
TELEMOVEL = StringVar()
EMAIL = StringVar()
OBS = StringVar() primeironome = Entry(Forms, textvariable=PRIMEIRONOME, width=28)
primeironome.grid(row=0, column=1)
ultimonome = Entry(Forms, textvariable=ULTIMONOME, width=28)
ultimonome.grid(row=1, column=1)
telefone = Entry(Forms, textvariable=TELEFONE, width=28)
telefone.grid(row=2, column=1)
telemovel = Entry(Forms, textvariable=TELEMOVEL, width=28)
telemovel.grid(row=3, column=1)
email = Entry(Forms, textvariable=EMAIL, width=28)
email.grid(row=4, column=1)
obs = Entry(Forms, textvariable=OBS,width=30)
obs.grid(row=5, column=1)
btn_criar = Button(Buttons, width=10, text="Adicionar", command=acrescentar)
btn_criar.pack(side=LEFT)
btn_ler = Button(Buttons, width=10, text="Ler", command=ler)
btn_ler.pack(side=LEFT) btn_actualizacao = Button(Buttons, width=10, text="Actualização", state=DISABLED,command=actualiza)
btn_actualizacao.pack(side=LEFT)
btn_apagar = Button(Buttons, width=10, text="Apagar",command=eliminar)
btn_apagar.pack(side=LEFT)
btn_sair = Button(Buttons, width=10, text="Sair",command=sair)
btn_sair.pack(side=LEFT)
scrollbary = Scrollbar(Right, orient=VERTICAL)
scrollbarx = Scrollbar(Right, orient=HORIZONTAL)
tree = ttk.Treeview(Right, columns=("MemberID", "Primeironome", "Ultimonome",
"Telefone", "Telemovel", "Email", "Obs"),
selectmode="extended", height=500, 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('MemberID', text="MemberID", anchor=W)
tree.heading('Primeironome', text="Primeiro Nome", anchor=W)
tree.heading('Ultimonome', text="Último Nome", anchor=W)
tree.heading('Telefone', text="Telefone", anchor=W)
tree.heading('Telemovel', text="Telemóvel", anchor=W)
tree.heading('Email', text="Email", anchor=W)
tree.heading('Obs', text="Observações", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=0)
tree.column('#2', stretch=NO, minwidth=0, width=120)
tree.column('#3', stretch=NO, minwidth=0, width=120)
tree.column('#4', stretch=NO, minwidth=0, width=80)
tree.column('#5', stretch=NO, minwidth=0, width=150)
tree.column('#6', stretch=NO, minwidth=0, width=120)
tree.column('#7', stretch=NO, minwidth=0, width=120)
tree.pack()
tree.bind('<Double-Button-1>', OnSelected) if __name__ == '__main__':
root.mainloop()
0