Mundo em Python

Lista de Filmes (CRUD usando tkinter )

from tkinter import*
import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
root = Tk()
root.title("Lista de Filmes")
root.geometry('950x700')
root.resizable(0,0)
root.configure(bg="#92aec7")
def Database():
global conn, cursor
conn = sqlite3.connect('listadefilme.db')
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nomefilme TEXT, actores TEXT, realizador TEXT, ano TEXT, genero TEXT)") def SearchRecord():
if SEARCH.get() != "":
tree.delete(*tree.get_children())
Database()
cursor=conn.execute("SELECT * FROM `member` WHERE nomefilme LIKE ?", ('%' + str(SEARCH.get()) + '%',))
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def Criar():
if NOMEFILME.get() == "" or ACTORES.get() == "" or REALIZADOR.get() == "" or ANO.get() == "" or GENERO.get() == "":
txt_result.config(text="Please complete the required field!", fg="red")
else:
Database()
cursor.execute("INSERT INTO `member` (nomefilme, actores, realizador, ano, genero)"
" VALUES(?, ?, ?, ?, ?)", (str(NOMEFILME.get()),
str(ACTORES.get()), str(REALIZADOR.get()), str(ANO.get()),
str(GENERO.get())))
tree.delete(*tree.get_children())
cursor.execute("SELECT * FROM `member` ORDER BY `nomefilme` 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()
NOMEFILME.set("")
ACTORES.set("")
REALIZADOR.set("")
ANO.set("")
GENERO.set("")
cursor.close()
conn.close()
txt_result.config (text="Registo de Filmes criado com Sucesso!", fg="green")
def Update():
Database()
tree.delete(*tree.get_children())
cursor.execute("UPDATE `member` SET `nomefilme` = ?, `actores` = ?, `realizador` =?, `ano` = ?, `genero` = ? WHERE `mem_id` = ?",
(str(NOMEFILME.get()), str(ACTORES.get()), str(REALIZADOR.get()), str(ANO.get()), str(GENERO.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `nomefilme` 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()
NOMEFILME.set("")
ACTORES.set("")
REALIZADOR.set("")
ANO.set("")
GENERO.set("")
btn_criar.config(state=NORMAL)
btn_ler.config(state=NORMAL)
btn_actualizacao.config(state=DISABLED)
btn_eliminar.config(state=NORMAL)
txt_result.config(text="Actualização de dados", fg="blue")
def OnSelected(event):
global mem_id;
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
mem_id = selecteditem[0]
NOMEFILME.set("")
ACTORES.set("")
REALIZADOR.set("")
ANO.set("")
GENERO.set("")
NOMEFILME.set(selecteditem[1])
ACTORES.set(selecteditem[2])
REALIZADOR.set(selecteditem[3])
ANO.set(selecteditem[4])
GENERO.set(selecteditem[5])
btn_criar.config(state=DISABLED)
btn_ler.config(state=DISABLED)
btn_actualizacao.config(state=NORMAL)
btn_eliminar.config(state=DISABLED)
def Ler():
tree.delete(*tree.get_children())
Database()
cursor.execute("SELECT * FROM `member` ORDER BY `nomefilme` 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="Dados todos", fg="blue")
def Apagar():
if not tree.selection():
txt_result.config(text="Por favor, selecione o filme ", fg="red")
else:
result = tkMessageBox.askquestion('Eliminar Filme', 'Deseja apagar filme?', 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 apagado com sucesso", fg="green") Top = Frame(root, width=900, height=50, bd=8, relief="raise")
Top.pack(side=TOP)
Left = Frame(root, width=500, height=500, bd=8, relief="raise")
Left.pack(side=LEFT)
Right = Frame(root, width=500, height=500, bd=8, relief="raise")
Right.pack(side=RIGHT)
Forms = Frame(Left, width=500, 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 Filmes",bg="Blue",fg="black")
txt_titulo.pack()
txt_nomefilme = Label(Forms, text="Nome de Filme:", font=('arial', 16), bd=15)
txt_nomefilme.grid(row=0, sticky="e")
txt_actores = Label(Forms, text="Actores:", font=('arial', 16), bd=15)
txt_actores.grid(row=1, sticky="e")
txt_realizador = Label(Forms, text="Realizador:", font=('arial', 16), bd=15)
txt_realizador.grid(row=2, sticky="e")
txt_ano = Label(Forms, text="Ano:", font=('arial', 16), bd=15)
txt_ano.grid(row=3, sticky="e")
txt_genero = Label(Forms, text="Género:", font=('arial', 16), bd=15)
txt_genero.grid(row=4, sticky="e")
txt_vazio1 = Label(Forms, text="", font=('arial', 16), bd=15)
txt_vazio1.grid(row=5, sticky="e")
txt_vazio2 = Label(Forms, text="", font=('arial', 16), bd=15)
txt_vazio2.grid(row=6, sticky="e")
txt_result = Label(Buttons)
txt_result.pack(side=TOP)
NOMEFILME = StringVar()
ACTORES = StringVar()
REALIZADOR = StringVar()
ANO = StringVar()
GENERO = StringVar()
SEARCH = StringVar() nomefilme = Entry(Forms, textvariable=NOMEFILME, width=30)
nomefilme.grid(row=0, column=1)
actores = Entry(Forms, textvariable=ACTORES, width=30)
actores.grid(row=1, column=1)
realizador = Entry(Forms, textvariable=REALIZADOR, width=30)
realizador.grid(row=2, column=1)
ano = Entry(Forms, textvariable=ANO, width=30)
ano.grid(row=3, column=1)
genero = Entry(Forms, textvariable=GENERO, width=30)
genero.grid(row=4, column=1)
btn_criar = Button(Buttons, width=10, text="Criar",command=Criar)
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="Actualizar",command= Update, state=DISABLED)
btn_actualizacao.pack(side=LEFT)
btn_eliminar = Button(Buttons, width=10, text="Apagar",command=Apagar)
btn_eliminar.pack(side=LEFT)
search = Entry(Buttons, textvariable=SEARCH, font=('verdana', 12), width=10)
search.pack(side=TOP, padx=10, fill=X)
search.insert(0, "Nome do Filme")
btn_search = Button(Buttons, text="Search",command=SearchRecord)
btn_search.pack(side=TOP, padx=10, pady=10, fill=X) scrollbary = Scrollbar(Right, orient=VERTICAL)
scrollbarx = Scrollbar(Right, orient=HORIZONTAL)
tree = ttk.Treeview(Right, columns=("MemberID", "Nomefilme", "Actores", "Realizador", "Ano", "Genero"),
selectmode="extended", height=300, 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('Nomefilme', text="Nome do Filme", anchor=W)
tree.heading('Actores', text="Actores", anchor=W)
tree.heading('Realizador', text="Realizador", anchor=W)
tree.heading('Ano', text="Ano", anchor=W)
tree.heading('Genero', text="Gênero ", 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=150)
tree.column('#3', stretch=NO, minwidth=0, width=150)
tree.column('#4', stretch=NO, minwidth=0, width=150)
tree.column('#5', stretch=NO, minwidth=0, width=80)
tree.column('#6', stretch=NO, minwidth=0, width=80)
tree.pack()
tree.bind('<Double-Button-1>', OnSelected)
if __name__ == '__main__':
root.mainloop()
0