CRUD (Lista de Livros)

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

root = Tk()
root.title("Lista de Livros")
# Criar Base de Dados
def Database():
global conn, cursor
conn = sqlite3.connect('livraria.db')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS `member` "
"(mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
"nomelivro TEXT, nomeautor TEXT, "
"estado TEXT, nomeeditora TEXT, ano TEXT, isbn TEXT)")
conn.commit()
df = Database()
# Criar
def Create():
if NOMELIVRO.get() == "" or NOMEAUTOR.get() == "" or ESTADO.get() == ""\
or NOMEEDITORA.get() == "" or ANO.get() == "" or ISBN.get() == "":
txt_result.config(text="Por favor, preencha o campo obrigatório!", fg="red")
else:
Database()
cursor.execute(
"INSERT INTO `member` (nomelivro, nomeautor, estado, nomeeditora, ano, isbn) VALUES(?, ?, ?, ?, ?, ?)",
(str(NOMELIVRO.get()), str(NOMEAUTOR.get()),
str(ESTADO.get()), str(NOMEEDITORA.get()),str(ANO.get()),str(ISBN.get())))
tree.delete(*tree.get_children())
cursor.execute("SELECT * FROM `member` ORDER BY `NOMELIVRO` 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()
NOMELIVRO.set("")
NOMEAUTOR.set("")
ESTADO.set("")
NOMEEDITORA.set("")
ANO.set("")
ISBN.set("")
cursor.close()
conn.close()
txt_result.config(text="Livro Adicionado!", fg="green")

#Ler
def Read():
tree.delete(*tree.get_children())
Database()
cursor.execute("SELECT * FROM `member` ORDER BY `NOMELIVRO` 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="Ler com sucesso os dados do banco de dados", fg="black")
Database()
if ESTADO.get() == "":
txt_result.config(text="Por favor, introduz um estado", fg="red")
else:
tree.delete(*tree.get_children())
cursor.execute("UPDATE `member` SET `nomelivro` = ?, "
"`nomeautor` = ?, `estado` =?, `nomeeditora` = ?, `ano` = ?, "
"`isbn` = ? WHERE `mem_id` = ?", (
str(NOMELIVRO.get()), str(NOMEAUTOR.get()), str(ESTADO.get()), str(NOMEEDITORA.get()),
str(ANO.get()), str(ISBN.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `nomelivro` 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()
NOMELIVRO.set("")
NOMEAUTOR.set("")
ESTADO.set("")
NOMEEDITORA.set("")
ANO.set("")
ISBN.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="Actualizado os dados!", fg="black")



def OnSelected(event):
global mem_id;
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
mem_id = selecteditem[0]
NOMELIVRO.set("")
NOMEAUTOR.set("")
ESTADO.set("")
NOMEEDITORA.set("")
ANO.set("")
ISBN.set("")
NOMELIVRO.set(selecteditem[1])
NOMEAUTOR.set(selecteditem[2])
NOMEEDITORA.set(selecteditem[4])
ANO.set(selecteditem[5])
ISBN.set(selecteditem[6])
btn_create.config(state=DISABLED)
btn_read.config(state=DISABLED)
btn_update.config(state=NORMAL)
btn_delete.config(state=DISABLED)
def Update():
Database()
if ESTADO.get() == "":
txt_result.config(text="Por favor, selecione um Estado", fg="red")
else:
tree.delete(*tree.get_children())
cursor.execute("UPDATE `member` SET `nomelivro` = ?, "
"`nomeautor` = ?, `estado` =?, `nomeeditora` = ?, `ano` = ?, "
"`isbn` = ? WHERE `mem_id` = ?", (
str(NOMELIVRO.get()), str(NOMEAUTOR.get()), str(ESTADO.get()),
str(NOMEEDITORA.get()),
str(ANO.get()), str(ISBN.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `nomelivro` 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()
NOMELIVRO.set("")
NOMEAUTOR.set("")
ESTADO.set("")
NOMEEDITORA.set("")
ANO.set("")
ISBN.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ção bem sucedida", fg="black")
def Delete():
if not tree.selection():
txt_result.config(text="Por Favor, Selecione um livro para eliminar.",
fg="red")
else:
result = tkMessageBox.askquestion('Lista de Livros',
'Deseja eliminar o registro.', 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="Registro de livro eliminado com sucesso", fg="green")


# Limpar
def clear_text():
nomelivro.delete(0, END)
nomeautor.delete(0, END)
nomeeditora.delete(0, END)
ano.delete(0, END)
isbn.delete(0, END)
# Saída
def Exit():
result = tkMessageBox.askquestion('Lista de Livro', 'Você tem certeza que quer sair?', icon="warning")
if result == 'yes':
root.destroy()
exit()

#Configuração da janela
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)
a = '%dx%d+%d+%d'
root.geometry(a % (width, height, x, y))
root.resizable(0, 0)
# Variáveis
NOMELIVRO = StringVar()
NOMEAUTOR = StringVar()
ESTADO = StringVar()
NOMEEDITORA = StringVar()
ANO = StringVar()
ISBN = StringVar()

# ==================================FRAME==============================================
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)
Novo = Radiobutton(RadioGroup, text="Novo", variable=ESTADO, value="Novo",
font=('arial', 16))\
.pack(side=LEFT)
Usado = Radiobutton(RadioGroup, text="Usado", variable=ESTADO, value="Usado",
font=('arial', 16)).pack(side=LEFT)

# ==================================LABEL WIDGET=======================================
txt_titulo = Label(Top, width=900, font=('arial', 24), text="Lista de Livros")
txt_titulo.pack()
txt_nomelivro = Label(Forms, text="Nome de Livro:", font=('arial', 16), bd=15)
txt_nomelivro.grid(row=0, sticky="e")
txt_nomeautor = Label(Forms, text="Nome do(s) Autor(es):",
font=('arial', 16), bd=15)
txt_nomeautor.grid(row=1, sticky="e")
txt_estado = Label(Forms, text="Estado:", font=('arial', 16), bd=15)
txt_estado.grid(row=2, sticky="e")
txt_nomeeditora = Label(Forms, text="Nome da Editora:", font=('arial', 16), bd=15)
txt_nomeeditora.grid(row=3, sticky="e")
txt_ano = Label(Forms, text="Ano:", font=('arial', 16), bd=15)
txt_ano.grid(row=4, sticky="e")
txt_isbn = Label(Forms, text="ISBN:", font=('arial', 16), bd=15)
txt_isbn.grid(row=5, sticky="e")
txt_result = Label(Buttons)
txt_result.pack(side=TOP)

# ==================================ENTRY WIDGET=======================================
nomelivro = Entry(Forms, textvariable=NOMELIVRO, width=30)
nomelivro.grid(row=0, column=1)
nomeautor = Entry(Forms, textvariable=NOMEAUTOR, width=30)
nomeautor.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
nomeeditora = Entry(Forms, textvariable=NOMEEDITORA, width=30)
nomeeditora.grid(row=3, column=1)
ano = Entry(Forms, textvariable=ANO, width=30)
ano.grid(row=4, column=1)
isbn = Entry(Forms, textvariable=ISBN, width=30)
isbn.grid(row=5, column=1)

#Butões

#command=Update, state=DISABLED
btn_create = Button(Buttons, width=10, text="Create",command=Create)
btn_create.pack(side=LEFT)
btn_read = Button(Buttons, width=10, text="Read",command=Read)
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="Delete",command=Delete)
btn_delete.pack(side=LEFT)
btn_limpar = Button(Buttons, width=10, text="Clear",command=clear_text)
btn_limpar.pack(side=LEFT)
btn_exit = Button(Buttons, width=10, text="Exit",command=Exit)
btn_exit.pack(side=LEFT)




# Tabela
scrollbary = Scrollbar(Right, orient=VERTICAL)
scrollbarx = Scrollbar(Right, orient=HORIZONTAL)
tree = ttk.Treeview(Right, columns=("MemberID", "NomeLivro",
"Nomeautor", "Estado", "Nomeeditora",
"Ano", "Isbn"),
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('NomeLivro', text="Nome do Livro", anchor=W)
tree.heading('Nomeautor', text="Nome do Autor", anchor=W)
tree.heading('Estado', text="Estado", anchor=W)
tree.heading('Nomeeditora', text="Nome de Editora", anchor=W)
tree.heading('Ano', text="Ano", anchor=W)
tree.heading('Isbn', text="ISBN", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=80)
tree.column('#2', stretch=NO, minwidth=0, width=120)
tree.column('#3', stretch=NO, minwidth=0, width=100)
tree.column('#4', stretch=NO, minwidth=0, width=50)
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()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação