Exemplo muito simples de CRUD

from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
from datetime import datetime


def Database():
global conn, cursor
conn = sqlite3.connect("pessoas_exemplos.db")
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NOME TEXT, "
"DATANASCIMENTO TEXT, SEXO TEXT, MORADA TEXT, CONTACTO TEXT, IDADE INTEGER, CLASSIFICACAO TEXT)")
conn.commit()


def DisplayForm():
root = Tk()
root.geometry("900x500")
root.title("Registar Pessoas")
global tree
global SEARCH
global nome, datanascimento, sexo, morada, contacto
SEARCH = StringVar()
nome = StringVar()
datanascimento = StringVar()
sexo = StringVar()
morada = 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="Registar Pessoas", 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)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=nome).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Data de Nascimento ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=datanascimento).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Sexo ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
sexo.set("Selecionar Sexo")
content = {'Masculino', 'Feminino'}
OptionMenu(LFrom, sexo, *content).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Morada ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=morada).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Contacto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=contacto).pack(side=TOP, padx=10, fill=X)

Button(LFrom, text="Submeter", font=("Arial", 10, "bold"), bg="cyan", command=register).pack(side=TOP, padx=10,
pady=5, fill=X)

lbl_txtsearch = Label(LeftViewForm, text="Digite o Nome", font=('verdana', 10), bg="#0B4670")
lbl_txtsearch.pack()
search = Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15), width=10)
search.pack(side=TOP, padx=10, fill=X)

btn_search = Button(LeftViewForm, text="Pesquisa", bg="cyan", command=SearchRecord)
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)

scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
scrollbary = Scrollbar(MidViewForm, orient=VERTICAL)

tree = ttk.Treeview(MidViewForm, columns=(
"RID", "Nome", "Datanascimento", "Sexo", "Morada", "Contacto", "Idade", "Classificacao"),
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('Datanascimento', text="Data de Nascimento", anchor=W)
tree.heading('Sexo', text="Sexo", anchor=W)
tree.heading('Morada', text="Morada", anchor=W)
tree.heading('Contacto', text="Contacto", anchor=W)
tree.heading('Idade', text="Idade", anchor=W)
tree.heading('Classificacao', text="Classificação", anchor=W)

tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=50)
tree.column('#2', stretch=NO, minwidth=0, width=100)
tree.column('#3', stretch=NO, minwidth=0, width=150)
tree.column('#4', stretch=NO, minwidth=0, width=100)
tree.column('#5', stretch=NO, minwidth=0, width=150)
tree.column('#6', stretch=NO, minwidth=0, width=100)
tree.column('#7', stretch=NO, minwidth=0, width=50)
tree.column('#8', stretch=NO, minwidth=0, width=100)

tree.pack()
DisplayData()
root.mainloop()


def calcular_idade_e_classificacao(datanascimento):
birthdate = datetime.strptime(datanascimento, '%d/%m/%Y')
today = datetime.today()
age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
classificacao = "Maior" if age >= 18 else "Menor"
return age, classificacao


def register():
Database()
vnome = nome.get()
vdatanascimento = datanascimento.get()
vsexo = sexo.get()
vmorada = morada.get()
vcontacto = contacto.get()

if vnome == '' or vdatanascimento == '' or vsexo == '' or vmorada == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha os espaços vazios!!!")
else:
idade, classificacao = calcular_idade_e_classificacao(vdatanascimento)
conn.execute(
'INSERT INTO REGISTRATION (NOME, DATANASCIMENTO, SEXO, MORADA, CONTACTO, IDADE, CLASSIFICACAO) VALUES (?, ?, ?, ?, ?, ?, ?)',
(vnome, vdatanascimento, vsexo, vmorada, vcontacto, idade, classificacao))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro adicionado com sucesso")
DisplayData()
conn.close()


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 actualizacao():
Database()
vnome = nome.get()
vdatanascimento = datanascimento.get()
vsexo = sexo.get()
vmorada = morada.get()
vcontacto = contacto.get()

if vnome == '' or vdatanascimento == '' or vsexo == '' or vmorada == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os espaços!!!")
else:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
idade, classificacao = calcular_idade_e_classificacao(vdatanascimento)
conn.execute(
'UPDATE REGISTRATION SET NOME=?, DATANASCIMENTO=?, SEXO=?, MORADA=?, CONTACTO=?, IDADE=?, CLASSIFICACAO=? WHERE RID = ?',
(vnome, vdatanascimento, vsexo, vmorada, vcontacto, idade, classificacao, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Mensagem", "Atualizado com sucesso")
limpar()
DisplayData()
conn.close()


def apagar():
Database()
if not tree.selection():
tkMessageBox.showwarning("Atenção", "Selecione o registro a ser apagado")
else:
result = tkMessageBox.askquestion('Confirmar', 'Deseja apagar o registro selecionado?', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
conn.execute("DELETE FROM REGISTRATION WHERE RID = ?", (selecteditem[0],))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro apagado com sucesso")
conn.close()


def limpar():
tree.delete(*tree.get_children())
DisplayData()
SEARCH.set("")
nome.set("")
datanascimento.set("")
sexo.set("Selecionar Sexo")
morada.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(self):
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
nome.set(selecteditem[1])
datanascimento.set(selecteditem[2])
sexo.set(selecteditem[3])
morada.set(selecteditem[4])
contacto.set(selecteditem[5])


DisplayForm()
if __name__ == '__main__':
mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação