from tkinter import*
import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
root = Tk()
root.title("Registro de Aluno")
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
width = 900
height = 500
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
root.geometry('%dx%d+%d+%d' % (width, height, x, y))
root.resizable(0, 0)
def Database():
global conn, cursor
conn = sqlite3.connect('fichaestudante.db')
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, primeironome TEXT,"
" apelido TEXT, sexo TEXT, morada TEXT, numeroaluno TEXT)")
def criar():
if PRIMEIRONOME.get() == "" or APELIDO.get() == "" or SEXO.get() == "" or\
MORADA.get() == "" or NUMEROALUNO.get() == "":
txt_result.config(text="Por favor, preencha todos os dados!", fg="red")
else:
Database()
cursor.execute("INSERT INTO `member` (primeironome, apelido, sexo, morada, numeroaluno) VALUES(?, ?, ?, ?, ?)",
(str(PRIMEIRONOME.get()), str(APELIDO.get()), str(SEXO.get()), str(MORADA.get()),
str(NUMEROALUNO.get())))
tree.delete(*tree.get_children())
cursor.execute("SELECT * FROM `member` ORDER BY `apelido` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5]))
conn.commit()
PRIMEIRONOME.set("")
APELIDO.set("")
SEXO.set("")
MORADA.set("")
NUMEROALUNO.set("")
cursor.close()
conn.close()
txt_result.config(text="Criar Ficha de Aluno!", fg="green")
def ler():
tree.delete(*tree.get_children())
Database()
cursor.execute("SELECT * FROM `member` ORDER BY `apelido` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5]))
cursor.close()
conn.close()
txt_result.config(text="Mostrar todos os alunos", fg="blue")
def Update():
Database()
if SEXO.get() == "":
txt_result.config(text="Por favor, selecione uma hipótese. ", fg="red")
else:
tree.delete(*tree.get_children())
cursor.execute("UPDATE `member` SET `primeironome` = ?, `apelido` = ?, `sexo` =?, `morada` = ?, `numeroaluno` = ? WHERE `mem_id` = ?",
(str(PRIMEIRONOME.get()), str(APELIDO.get()), str(SEXO.get()), str(MORADA.get()), str(NUMEROALUNO.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `apelido` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data[0], data[1], data[2], data[3], data[4], data[5]))
cursor.close()
conn.close()
PRIMEIRONOME.set("")
APELIDO.set("")
SEXO.set("")
MORADA.set("")
NUMEROALUNO.set("")
btn_create.config(state=NORMAL)
btn_read.config(state=NORMAL)
btn_update.config(state=DISABLED)
btn_delete.config(state=NORMAL)
txt_result.config(text="Actualizações feitas com sucesso!", fg="black")
def OnSelected(event):
global mem_id;
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
mem_id = selecteditem[0]
PRIMEIRONOME.set("")
APELIDO.set("")
SEXO.set("")
MORADA.set("")
PRIMEIRONOME.set(selecteditem[1])
APELIDO.set(selecteditem[2])
MORADA.set(selecteditem[4])
NUMEROALUNO.set(selecteditem[5])
btn_create.config(state=DISABLED)
btn_read.config(state=DISABLED)
btn_update.config(state=NORMAL)
btn_delete.config(state=DISABLED)
def apagar():
if not tree.selection():
txt_result.config(text="Por favor, selecione um aluno.", fg="red")
else:
result = tkMessageBox.askquestion('Ficha de aluno', 'Tem a certeza que pretende apagar?', 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="Aluno apagado com sucesso!", fg="blue")
def sair():
result = tkMessageBox.askquestion('Ficha de Aluno', 'Deseja sair do programa?', icon="warning")
if result == 'yes':
root.destroy()
exit()
PRIMEIRONOME = StringVar()
APELIDO = StringVar()
SEXO = StringVar()
MORADA = StringVar()
NUMEROALUNO = StringVar()
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)
RadioGroup = Frame(Forms)
homem = Radiobutton(RadioGroup, text="Homem", variable=SEXO, value="M", font=('arial', 16)).pack(side=LEFT)
mulher = Radiobutton(RadioGroup, text="Mulher", variable=SEXO, value="F", font=('arial', 16)).pack(side=LEFT)
txt_titulo = Label(Top, width=900, font=('arial', 24), text = "Ficha de Estudante")
txt_titulo.pack()
txt_primeironome = Label(Forms, text="Primeiro Nome:", font=('arial', 16), bd=15)
txt_primeironome.grid(row=0, sticky="e")
txt_apelido = Label(Forms, text="Apelido(s):", font=('arial', 16), bd=15)
txt_apelido.grid(row=1, sticky="e")
txt_sexo = Label(Forms, text="Sexo:", font=('arial', 16), bd=15)
txt_sexo.grid(row=2, sticky="e")
txt_morada = Label(Forms, text="Morada:", font=('arial', 16), bd=15)
txt_morada.grid(row=3, sticky="e")
txt_numeroaluno = Label(Forms, text="Número de Aluno:", font=('arial', 16), bd=15)
txt_numeroaluno.grid(row=4, sticky="e")
txt_result = Label(Buttons)
txt_result
primeironome = Entry(Forms, textvariable=PRIMEIRONOME, width=30)
primeironome.grid(row=0, column=1)
apelido = Entry(Forms, textvariable=APELIDO, width=30)
apelido.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
morada = Entry(Forms, textvariable=MORADA, width=30)
morada.grid(row=3, column=1)
numeroaluno = Entry(Forms, textvariable=NUMEROALUNO, width=30)
numeroaluno.grid(row=4, column=1)
btn_create = Button(Buttons, width=10, text="Criar Aluno", command=criar)
btn_create.pack(side=LEFT)
btn_read = Button(Buttons, width=10, text="Ler", command=ler )
btn_read.pack(side=LEFT)
btn_update = Button(Buttons, width=10, text="Update", command=Update, state=DISABLED)
btn_update.pack(side=LEFT)
btn_delete = Button(Buttons, width=10, text="Eliminar", command=apagar)
btn_delete.pack(side=LEFT)
btn_sair = Button(Buttons, width=10, text="Exit", command=sair)
btn_sair.pack(side=LEFT)
scrollbary = Scrollbar(Right, orient=VERTICAL)
scrollbarx = Scrollbar(Right, orient=HORIZONTAL)
tree = ttk.Treeview(Right, columns=("MemberID", "Nome", "Apelido", "Sexo", "Morada", "Numeroaluno"),
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('Nome', text="Primeiro Nome", anchor=W)
tree.heading('Apelido', text="Apelido", anchor=W)
tree.heading('Sexo', text="Sexo", anchor=W)
tree.heading('Morada', text="Morada", anchor=W)
tree.heading('Numeroaluno', text="Número de Aluno", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=5)
tree.column('#1', stretch=NO, minwidth=0, width=120)
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.pack()
tree.bind('<Double-Button-1>', OnSelected)
if __name__ == '__main__':
root.mainloop()