import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
from datetime import datetime
# Configuração do banco de dados
def init_db():
global conn, cursor
conn = sqlite3.connect("prendas_natal.db")
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS prendas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pessoa TEXT NOT NULL,
descricao TEXT NOT NULL,
status TEXT NOT NULL
)
''')
conn.commit()
def add_prenda():
pessoa = entry_pessoa.get()
descricao = entry_descricao.get()
status = "Não Comprado"
if not pessoa or not descricao:
messagebox.showwarning("Atenção", "Preencha todos os campos!")
return
cursor.execute('INSERT INTO prendas (pessoa, descricao, status) VALUES (?, ?, ?)', (pessoa, descricao, status))
conn.commit()
messagebox.showinfo("Sucesso", "Prenda adicionada com sucesso")
update_treeview()
def update_treeview():
treeview.delete(*treeview.get_children())
cursor.execute('SELECT * FROM prendas')
rows = cursor.fetchall()
for row in rows:
treeview.insert('', 'end', values=row)
def edit_prenda():
selected_item = treeview.selection()
if not selected_item:
messagebox.showwarning("Atenção", "Selecione uma prenda para editar!")
return
item_id = treeview.item(selected_item[0], 'values')[0]
pessoa = entry_pessoa.get()
descricao = entry_descricao.get()
if not pessoa or not descricao:
messagebox.showwarning("Atenção", "Preencha todos os campos!")
return
cursor.execute('UPDATE prendas SET pessoa=?, descricao=? WHERE id=?', (pessoa, descricao, item_id))
conn.commit()
messagebox.showinfo("Sucesso", "Prenda atualizada com sucesso")
update_treeview()
def delete_prenda():
selected_item = treeview.selection()
if not selected_item:
messagebox.showwarning("Atenção", "Selecione uma prenda para excluir!")
return
item_id = treeview.item(selected_item[0], 'values')[0]
cursor.execute('DELETE FROM prendas WHERE id=?', (item_id,))
conn.commit()
messagebox.showinfo("Sucesso", "Prenda excluída com sucesso")
update_treeview()
def mark_as_purchased():
selected_item = treeview.selection()
if not selected_item:
messagebox.showwarning("Atenção", "Selecione uma prenda para marcar como comprada!")
return
item_id = treeview.item(selected_item[0], 'values')[0]
cursor.execute('UPDATE prendas SET status=? WHERE id=?', ("Comprado", item_id))
conn.commit()
messagebox.showinfo("Sucesso", "Prenda marcada como comprada")
update_treeview()
def show_statistics():
cursor.execute('SELECT COUNT(*) FROM prendas WHERE status="Comprado"')
bought = cursor.fetchone()[0]
cursor.execute('SELECT COUNT(*) FROM prendas WHERE status="Não Comprado"')
not_bought = cursor.fetchone()[0]
messagebox.showinfo("Estatísticas", f"Comprado: {bought}\nNão Comprado: {not_bought}")
# Interface Gráfica
def create_gui():
global entry_pessoa, entry_descricao, treeview
root = tk.Tk()
root.title("Lista de Prendas de Natal")
frame_input = tk.Frame(root)
frame_input.pack(pady=10)
tk.Label(frame_input, text="Pessoa:").grid(row=0, column=0, padx=5)
tk.Label(frame_input, text="Descrição:").grid(row=1, column=0, padx=5)
entry_pessoa = tk.Entry(frame_input)
entry_pessoa.grid(row=0, column=1, padx=5)
entry_descricao = tk.Entry(frame_input)
entry_descricao.grid(row=1, column=1, padx=5)
tk.Button(frame_input, text="Adicionar Prenda", command=add_prenda).grid(row=2, column=0, pady=10)
tk.Button(frame_input, text="Editar Prenda", command=edit_prenda).grid(row=2, column=1, pady=10)
frame_buttons = tk.Frame(root)
frame_buttons.pack(pady=10)
tk.Button(frame_buttons, text="Excluir Prenda", command=delete_prenda).pack(side=tk.LEFT, padx=5)
tk.Button(frame_buttons, text="Marcar como Comprado", command=mark_as_purchased).pack(side=tk.LEFT, padx=5)
tk.Button(frame_buttons, text="Estatísticas", command=show_statistics).pack(side=tk.LEFT, padx=5)
frame_treeview = tk.Frame(root)
frame_treeview.pack(pady=10)
treeview = ttk.Treeview(frame_treeview, columns=("id", "pessoa", "descricao", "status"), show="headings")
treeview.heading("id", text="ID")
treeview.heading("pessoa", text="Pessoa")
treeview.heading("descricao", text="Descrição")
treeview.heading("status", text="Status")
treeview.pack()
update_treeview()
root.mainloop()
if __name__ == "__main__":
init_db()
create_gui()