Editar pets and peoples
This commit is contained in:
		
							parent
							
								
									06df91c1b4
								
							
						
					
					
						commit
						50b23b07ef
					
				| 
						 | 
				
			
			@ -4,51 +4,94 @@ from tkinter import messagebox
 | 
			
		|||
class DialogoAdicionarPet(tk.Toplevel):
 | 
			
		||||
    def __init__(self, parent):
 | 
			
		||||
        super().__init__(parent)
 | 
			
		||||
        self.transient(parent)
 | 
			
		||||
        self.title("Adicionar Novo Pet")
 | 
			
		||||
        self.parent = parent
 | 
			
		||||
        self.result = None
 | 
			
		||||
 | 
			
		||||
        body = tk.Frame(self, padx=15, pady=15)
 | 
			
		||||
        self.initial_focus = self.criar_formulario(body)
 | 
			
		||||
        body.pack()
 | 
			
		||||
        self.title("Adicionar Novo Pet")
 | 
			
		||||
        self.geometry("300x200")
 | 
			
		||||
        self.configure(bg="#1e1e1e")
 | 
			
		||||
        self.transient(parent)
 | 
			
		||||
        self.grab_set()
 | 
			
		||||
 | 
			
		||||
        self.criar_botoes()
 | 
			
		||||
        self._criar_widgets()
 | 
			
		||||
        self.wait_window(self)
 | 
			
		||||
 | 
			
		||||
        self.grab_set() # Torna a janela modal
 | 
			
		||||
        self.protocol("WM_DELETE_WINDOW", self._on_cancel)
 | 
			
		||||
        self.geometry(f"+{parent.winfo_rootx()+50}+{parent.winfo_rooty()+50}")
 | 
			
		||||
        self.initial_focus.focus_set()
 | 
			
		||||
        self.wait_window(self) # Pausa a execução até que a janela seja fechada
 | 
			
		||||
    def _criar_widgets(self):
 | 
			
		||||
        main_frame = tk.Frame(self, bg="#1e1e1e", padx=20, pady=20)
 | 
			
		||||
        main_frame.pack(fill="both", expand=True)
 | 
			
		||||
 | 
			
		||||
    def criar_formulario(self, master):
 | 
			
		||||
        tk.Label(master, text="Nome:").grid(row=0, column=0, sticky="w", pady=3)
 | 
			
		||||
        self.nome_entry = tk.Entry(master, width=30)
 | 
			
		||||
        self.nome_entry.grid(row=0, column=1, padx=5, pady=3)
 | 
			
		||||
        tk.Label(main_frame, text="Nome:", bg="#1e1e1e", fg="white").pack(anchor="w")
 | 
			
		||||
        self.entry_nome = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white")
 | 
			
		||||
        self.entry_nome.pack(fill="x", pady=(0, 10))
 | 
			
		||||
 | 
			
		||||
        tk.Label(master, text="Espécie:").grid(row=1, column=0, sticky="w", pady=3)
 | 
			
		||||
        self.especie_entry = tk.Entry(master, width=30)
 | 
			
		||||
        self.especie_entry.grid(row=1, column=1, padx=5, pady=3)
 | 
			
		||||
        tk.Label(main_frame, text="Espécie:", bg="#1e1e1e", fg="white").pack(anchor="w")
 | 
			
		||||
        self.entry_especie = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white")
 | 
			
		||||
        self.entry_especie.pack(fill="x", pady=(0, 20))
 | 
			
		||||
 | 
			
		||||
        return self.nome_entry # Define o foco inicial
 | 
			
		||||
        botoes_frame = tk.Frame(main_frame, bg="#1e1e1e")
 | 
			
		||||
        botoes_frame.pack(fill="x")
 | 
			
		||||
 | 
			
		||||
    def criar_botoes(self):
 | 
			
		||||
        box = tk.Frame(self, pady=5)
 | 
			
		||||
        tk.Button(box, text="Adicionar", width=10, command=self._on_ok, default=tk.ACTIVE).pack(side=tk.LEFT, padx=5)
 | 
			
		||||
        tk.Button(box, text="Cancelar", width=10, command=self._on_cancel).pack(side=tk.LEFT, padx=5)
 | 
			
		||||
        self.bind("<Return>", self._on_ok)
 | 
			
		||||
        self.bind("<Escape>", self._on_cancel)
 | 
			
		||||
        box.pack()
 | 
			
		||||
        btn_ok = tk.Button(botoes_frame, text="Adicionar", command=self._on_ok, bg="#4CAF50", fg="white", relief="flat")
 | 
			
		||||
        btn_ok.pack(side="right", padx=(10, 0))
 | 
			
		||||
 | 
			
		||||
    def _on_ok(self, event=None):
 | 
			
		||||
        nome = self.nome_entry.get().strip()
 | 
			
		||||
        especie = self.especie_entry.get().strip()
 | 
			
		||||
        btn_cancelar = tk.Button(botoes_frame, text="Cancelar", command=self.destroy, bg="#f44336", fg="white", relief="flat")
 | 
			
		||||
        btn_cancelar.pack(side="right")
 | 
			
		||||
 | 
			
		||||
        self.entry_nome.focus_set()
 | 
			
		||||
 | 
			
		||||
    def _on_ok(self):
 | 
			
		||||
        nome = self.entry_nome.get().strip()
 | 
			
		||||
        especie = self.entry_especie.get().strip()
 | 
			
		||||
        if not nome or not especie:
 | 
			
		||||
            messagebox.showwarning("Campos Vazios", "Por favor, preencha o nome e a espécie.", parent=self)
 | 
			
		||||
            return
 | 
			
		||||
        self.result = {"nome": nome, "especie": especie}
 | 
			
		||||
        self._on_cancel()
 | 
			
		||||
        self.destroy()
 | 
			
		||||
 | 
			
		||||
    def _on_cancel(self, event=None):
 | 
			
		||||
        self.parent.focus_set()
 | 
			
		||||
 | 
			
		||||
class DialogoEditarPet(tk.Toplevel):
 | 
			
		||||
    def __init__(self, parent, pet_atual):
 | 
			
		||||
        super().__init__(parent)
 | 
			
		||||
        self.result = None
 | 
			
		||||
        self.pet_atual = pet_atual
 | 
			
		||||
 | 
			
		||||
        self.title("Editar Pet")
 | 
			
		||||
        self.geometry("300x200")
 | 
			
		||||
        self.configure(bg="#1e1e1e")
 | 
			
		||||
        self.transient(parent)
 | 
			
		||||
        self.grab_set()
 | 
			
		||||
 | 
			
		||||
        self._criar_widgets()
 | 
			
		||||
 | 
			
		||||
    def _criar_widgets(self):
 | 
			
		||||
        main_frame = tk.Frame(self, bg="#1e1e1e", padx=20, pady=20)
 | 
			
		||||
        main_frame.pack(fill="both", expand=True)
 | 
			
		||||
 | 
			
		||||
        tk.Label(main_frame, text="Nome:", bg="#1e1e1e", fg="white").pack(anchor="w")
 | 
			
		||||
        self.entry_nome = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white")
 | 
			
		||||
        self.entry_nome.insert(0, self.pet_atual.nome)
 | 
			
		||||
        self.entry_nome.pack(fill="x", pady=(0, 10))
 | 
			
		||||
 | 
			
		||||
        tk.Label(main_frame, text="Espécie:", bg="#1e1e1e", fg="white").pack(anchor="w")
 | 
			
		||||
        self.entry_especie = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white")
 | 
			
		||||
        self.entry_especie.insert(0, self.pet_atual.especie)
 | 
			
		||||
        self.entry_especie.pack(fill="x", pady=(0, 20))
 | 
			
		||||
 | 
			
		||||
        botoes_frame = tk.Frame(main_frame, bg="#1e1e1e")
 | 
			
		||||
        botoes_frame.pack(fill="x")
 | 
			
		||||
 | 
			
		||||
        btn_ok = tk.Button(botoes_frame, text="Salvar", command=self._on_ok, bg="#4CAF50", fg="white", relief="flat")
 | 
			
		||||
        btn_ok.pack(side="right", padx=(10, 0))
 | 
			
		||||
 | 
			
		||||
        btn_cancelar = tk.Button(botoes_frame, text="Cancelar", command=self.destroy, bg="#f44336", fg="white", relief="flat")
 | 
			
		||||
        btn_cancelar.pack(side="right")
 | 
			
		||||
 | 
			
		||||
    def _on_ok(self):
 | 
			
		||||
        nome = self.entry_nome.get().strip()
 | 
			
		||||
        especie = self.entry_especie.get().strip()
 | 
			
		||||
 | 
			
		||||
        if not nome or not especie:
 | 
			
		||||
            messagebox.showerror("Erro", "Nome e espécie não podem ser vazios.", parent=self)
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.result = {"nome": nome, "especie": especie}
 | 
			
		||||
        self.destroy()
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +73,20 @@ class FramePessoas(tk.Frame):
 | 
			
		|||
        )
 | 
			
		||||
        btn_adicionar.pack(side="left", padx=5)
 | 
			
		||||
 
 | 
			
		||||
        # Botão Alterar
 | 
			
		||||
        btn_alterar = tk.Button(
 | 
			
		||||
            botoes_frame,
 | 
			
		||||
            text="Alterar",
 | 
			
		||||
            command=self.alterar_pessoa,
 | 
			
		||||
            bg="#ffc107",  # Cor amarela para edição
 | 
			
		||||
            fg="white",
 | 
			
		||||
            font=("Arial", 12),
 | 
			
		||||
            relief="flat",
 | 
			
		||||
            padx=10,
 | 
			
		||||
            pady=5
 | 
			
		||||
        )
 | 
			
		||||
        btn_alterar.pack(side="left", padx=5)
 | 
			
		||||
 | 
			
		||||
        btn_apagar = tk.Button(
 | 
			
		||||
            botoes_frame,
 | 
			
		||||
            text="Apagar",
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +115,30 @@ class FramePessoas(tk.Frame):
 | 
			
		|||
            self.popular_treeview()
 | 
			
		||||
            messagebox.showinfo("Sucesso", "Pessoa adicionada com sucesso.")
 | 
			
		||||
 | 
			
		||||
    def alterar_pessoa(self):
 | 
			
		||||
        selecionado = self.tree.selection()
 | 
			
		||||
        if not selecionado:
 | 
			
		||||
            messagebox.showwarning("Aviso", "Por favor, selecione uma pessoa para alterar.")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        item = self.tree.item(selecionado[0])
 | 
			
		||||
        id_pessoa, nome_atual = item['values']
 | 
			
		||||
 | 
			
		||||
        novo_nome = simpledialog.askstring(
 | 
			
		||||
            "Alterar Pessoa",
 | 
			
		||||
            "Digite o novo nome:",
 | 
			
		||||
            initialvalue=nome_atual,
 | 
			
		||||
            parent=self
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if novo_nome and novo_nome.strip() and novo_nome.strip() != nome_atual:
 | 
			
		||||
            pessoa = self.bd.pessoas.buscar_por_id(id_pessoa)
 | 
			
		||||
            if pessoa:
 | 
			
		||||
                pessoa.nome = novo_nome.strip()
 | 
			
		||||
                self.bd.pessoas.alterar(pessoa.id, pessoa)
 | 
			
		||||
                self.popular_treeview()
 | 
			
		||||
                messagebox.showinfo("Sucesso", "Pessoa alterada com sucesso.")
 | 
			
		||||
 | 
			
		||||
    def apagar_pessoa(self):
 | 
			
		||||
        selecionado = self.tree.selection()
 | 
			
		||||
        if not selecionado:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ import tkinter as tk
 | 
			
		|||
from tkinter import ttk, messagebox
 | 
			
		||||
 | 
			
		||||
from modelo.pet import Pet
 | 
			
		||||
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet
 | 
			
		||||
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet, DialogoEditarPet
 | 
			
		||||
 | 
			
		||||
class FramePet(tk.Frame):
 | 
			
		||||
    def __init__(self, master=None, bd=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +80,20 @@ class FramePet(tk.Frame):
 | 
			
		|||
        )
 | 
			
		||||
        btn_adicionar.pack(side="left", padx=5)
 | 
			
		||||
 | 
			
		||||
        # Botão Alterar
 | 
			
		||||
        btn_alterar = tk.Button(
 | 
			
		||||
            botoes_frame,
 | 
			
		||||
            text="Alterar",
 | 
			
		||||
            command=self.alterar_pet,
 | 
			
		||||
            bg="#ffc107",  # Cor amarela para edição
 | 
			
		||||
            fg="white",
 | 
			
		||||
            font=("Arial", 12),
 | 
			
		||||
            relief="flat",
 | 
			
		||||
            padx=10,
 | 
			
		||||
            pady=5
 | 
			
		||||
        )
 | 
			
		||||
        btn_alterar.pack(side="left", padx=5)
 | 
			
		||||
 | 
			
		||||
        # Botão Apagar
 | 
			
		||||
        btn_apagar = tk.Button(
 | 
			
		||||
            botoes_frame,
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +125,30 @@ class FramePet(tk.Frame):
 | 
			
		|||
            self.popular_treeview()
 | 
			
		||||
            messagebox.showinfo("Sucesso", "Pet adicionado com sucesso.")
 | 
			
		||||
 | 
			
		||||
    def alterar_pet(self):
 | 
			
		||||
        selecionado = self.tree.selection()
 | 
			
		||||
        if not selecionado:
 | 
			
		||||
            messagebox.showwarning("Aviso", "Por favor, selecione um pet para alterar.")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        item = self.tree.item(selecionado[0])
 | 
			
		||||
        id_pet, _, _ = item['values']
 | 
			
		||||
 | 
			
		||||
        pet_atual = self.bd.pets.buscar_por_id(id_pet)
 | 
			
		||||
        if not pet_atual:
 | 
			
		||||
            messagebox.showerror("Erro", "Pet não encontrado no banco de dados.")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        dialog = DialogoEditarPet(self, pet_atual)
 | 
			
		||||
        self.wait_window(dialog)
 | 
			
		||||
 | 
			
		||||
        if dialog.result:
 | 
			
		||||
            pet_atual.nome = dialog.result["nome"]
 | 
			
		||||
            pet_atual.especie = dialog.result["especie"]
 | 
			
		||||
            self.bd.pets.alterar(pet_atual.id, pet_atual)
 | 
			
		||||
            self.popular_treeview()
 | 
			
		||||
            messagebox.showinfo("Sucesso", "Pet alterado com sucesso.")
 | 
			
		||||
 | 
			
		||||
    def apagar_pet(self):
 | 
			
		||||
        selecionado = self.tree.selection()
 | 
			
		||||
        if not selecionado:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue