pets/visao/frames/frame_pet.py

125 lines
4.4 KiB
Python

import tkinter as tk
from tkinter import ttk, messagebox
from modelo.pet import Pet
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet
class FramePet(tk.Frame):
def __init__(self, master=None, bd=None):
super().__init__(master, bg="#1e1e1e")
self.bd = bd
self._criar_layout()
def _criar_layout(self):
# Título da seção
titulo_label = tk.Label(
self,
text="GERENCIAR PETS",
font=("Arial", 24, "bold"),
bg="#1e1e1e",
fg="white"
)
titulo_label.pack(pady=20)
# Estilo para a Treeview
style = ttk.Style()
style.theme_use("default")
style.configure("Treeview",
background="#2c2c2c", # Cor de fundo da Treeview
foreground="white",
rowheight=25, # Altura da linha
fieldbackground="#2c2c2c",
bordercolor="#2c2c2c",
borderwidth=0)
style.map('Treeview', background=[('selected', '#1f6aa5')])
style.configure("Treeview.Heading",
background="#2c2c2c",
foreground="white",
font=("Arial", 12, "bold"),
relief="flat")
style.map("Treeview.Heading",
background=[('active', '#3c3c3c')])
# Frame para a Treeview e Scrollbar
tree_container = tk.Frame(self, bg="#1e1e1e")
tree_container.pack(pady=10, padx=20, fill="both", expand=True)
self.tree = ttk.Treeview(tree_container, columns=("id", "nome", "especie"), show="headings")
self.tree.heading("id", text="ID")
self.tree.heading("nome", text="Nome", anchor="w")
self.tree.heading("especie", text="Espécie", anchor="w")
self.tree.column("id", width=100, anchor="center", stretch=tk.NO)
self.tree.column("nome", stretch=tk.YES)
self.tree.column("especie", stretch=tk.YES)
scrollbar = ttk.Scrollbar(tree_container, orient="vertical", command=self.tree.yview)
self.tree.configure(yscrollcommand=scrollbar.set)
self.tree.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
self.popular_treeview()
# Frame para os botões de ação
botoes_frame = tk.Frame(self, bg="#1e1e1e")
botoes_frame.pack(pady=10, padx=20, fill="x")
# Botão Adicionar
btn_adicionar = tk.Button(
botoes_frame,
text="Adicionar",
command=self.adicionar_pet,
bg="#4CAF50",
fg="white",
font=("Arial", 12),
relief="flat",
padx=10,
pady=5
)
btn_adicionar.pack(side="left", padx=5)
# Botão Apagar
btn_apagar = tk.Button(
botoes_frame,
text="Apagar",
command=self.apagar_pet,
bg="#f44336",
fg="white",
font=("Arial", 12),
relief="flat",
padx=10,
pady=5
)
btn_apagar.pack(side="left", padx=5)
def popular_treeview(self):
for i in self.tree.get_children():
self.tree.delete(i)
for pet in self.bd.pets.listar_todos():
self.tree.insert("", "end", values=(pet.id, pet.nome, pet.especie))
def adicionar_pet(self):
dialog = DialogoAdicionarPet(self)
if dialog.result:
nome = dialog.result["nome"]
especie = dialog.result["especie"]
proximo_id = self.bd.obter_proximo_id()
novo_pet = Pet(proximo_id, nome, especie)
self.bd.pets.inserir(novo_pet)
self.popular_treeview()
messagebox.showinfo("Sucesso", "Pet adicionado com sucesso.")
def apagar_pet(self):
selecionado = self.tree.selection()
if not selecionado:
messagebox.showwarning("Aviso", "Por favor, selecione um pet para apagar.")
return
item = self.tree.item(selecionado[0])
id_pet, nome_pet, _ = item['values'] # Ignora a espécie, que agora está na treeview
if messagebox.askyesno("Confirmar", f"Tem certeza que deseja apagar '{nome_pet}'?"):
self.bd.pets.remover(id_pet)
self.popular_treeview()
messagebox.showinfo("Sucesso", "Pet apagada com sucesso.")