Home page
This commit is contained in:
parent
1878c1da7c
commit
e330ab548c
7
main.py
7
main.py
|
@ -1,7 +1,6 @@
|
||||||
from visao.interface_texto import InterfaceTexto
|
from visao.interface_texto import InterfaceTexto
|
||||||
# from visao.interface_gui import interfaceGUI
|
from visao.interface_gui import InterfaceGUI
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
interface = InterfaceTexto()
|
app = InterfaceGUI()
|
||||||
interface.executar()
|
app.mainloop()
|
||||||
|
|
|
@ -1,24 +1,165 @@
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
|
from tkinter import font as tkfont
|
||||||
|
from tkinter import messagebox # Usado para os botões de exemplo
|
||||||
|
|
||||||
class interfaceGUI:
|
class InterfaceGUI(tk.Tk):
|
||||||
|
"""Classe principal que gerencia a janela e os frames (painéis)."""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __init__(self):
|
self.title("Sistema de Adoção de Pets")
|
||||||
# self.bd = BancoDeDados()
|
# Um pouco maior para acomodar melhor o design
|
||||||
self.proximo_id = 1
|
self.geometry("1024x600")
|
||||||
self.root = tk.Tk()
|
self.minsize(900, 550) # Define um tamanho mínimo
|
||||||
self.root.title("Minha Janela")
|
self.configure(bg="#1e1e1e")
|
||||||
self.root.geometry("300x200")
|
|
||||||
|
# Define fontes para serem usadas na aplicação
|
||||||
|
self.title_font = tkfont.Font(family='Helvetica', size=16, weight="bold")
|
||||||
self.root.configure(bg="#1e1e1e") # fundo escuro
|
self.label_font = tkfont.Font(family='Helvetica', size=10)
|
||||||
label = tk.Label(self.root, text="Texto", bg="#1e1e1e", fg="white")
|
self.button_font = tkfont.Font(family='Helvetica', size=20, weight="bold")
|
||||||
botao = tk.Button(self.root, text="OK", bg="#333333", fg="white")
|
self.widget_title_font = tkfont.Font(family='Helvetica', size=12, weight="bold")
|
||||||
|
|
||||||
|
# Container principal que usa todo o espaço
|
||||||
|
container = tk.Frame(self, bg="#1e1e1e")
|
||||||
|
container.pack(side="top", fill="both", expand=True)
|
||||||
|
container.grid_rowconfigure(0, weight=1)
|
||||||
|
container.grid_columnconfigure(0, weight=1)
|
||||||
|
|
||||||
|
self.frames = {}
|
||||||
|
# Adicione futuras classes de painel aqui
|
||||||
|
for F in (HomePage,):
|
||||||
|
page_name = F.__name__
|
||||||
|
frame = F(parent=container, controller=self)
|
||||||
|
self.frames[page_name] = frame
|
||||||
|
frame.grid(row=0, column=0, sticky="nsew")
|
||||||
|
|
||||||
|
self.show_frame("HomePage")
|
||||||
|
|
||||||
|
def show_frame(self, page_name):
|
||||||
|
"""Mostra um frame para a página requisitada."""
|
||||||
|
frame = self.frames[page_name]
|
||||||
|
frame.tkraise()
|
||||||
|
|
||||||
|
class ActionCard(tk.Frame):
|
||||||
|
"""Um widget 'Card' reutilizável para as ações principais."""
|
||||||
|
def __init__(self, parent, controller, title, description, command):
|
||||||
|
super().__init__(parent, bg="#2d2d2d", relief="raised", borderwidth=1)
|
||||||
|
|
||||||
|
# Adiciona um padding interno ao card
|
||||||
|
self.grid_propagate(False) # Impede que os widgets filhos redimensionem o card
|
||||||
|
self.config(width=250, height=180) # Tamanho fixo para o card
|
||||||
|
|
||||||
|
title_label = tk.Label(
|
||||||
|
self,
|
||||||
|
text=title,
|
||||||
|
font=controller.widget_title_font,
|
||||||
|
fg="white",
|
||||||
|
bg="#2d2d2d"
|
||||||
|
)
|
||||||
|
title_label.pack(pady=(15, 5))
|
||||||
|
|
||||||
|
desc_label = tk.Label(
|
||||||
|
self,
|
||||||
|
text=description,
|
||||||
|
font=controller.label_font,
|
||||||
|
fg="#cccccc", # Um cinza mais claro
|
||||||
|
bg="#2d2d2d"
|
||||||
|
)
|
||||||
|
desc_label.pack(pady=5)
|
||||||
|
|
||||||
|
# Botão de ação estilizado como um ícone
|
||||||
|
action_button = tk.Button(
|
||||||
|
self,
|
||||||
|
text="➕", # Um ícone de 'mais' simples. Você pode usar uma imagem aqui.
|
||||||
|
font=controller.button_font,
|
||||||
|
fg="white",
|
||||||
|
bg="#4a4a4a",
|
||||||
|
activebackground="#6a6a6a",
|
||||||
|
activeforeground="white",
|
||||||
|
relief="flat",
|
||||||
|
width=3,
|
||||||
|
command=command
|
||||||
|
)
|
||||||
|
action_button.pack(side="bottom", pady=15)
|
||||||
|
|
||||||
|
class HomePage(tk.Frame):
|
||||||
|
"""Painel da tela inicial (Home), agora com o layout de cards."""
|
||||||
|
def __init__(self, parent, controller):
|
||||||
|
super().__init__(parent, bg="#1e1e1e")
|
||||||
|
self.controller = controller
|
||||||
|
|
||||||
|
# Configura o grid principal da HomePage para ter 2 colunas
|
||||||
|
self.grid_columnconfigure(0, weight=2) # Coluna da esquerda (cards)
|
||||||
|
self.grid_columnconfigure(1, weight=1) # Coluna da direita (configurações)
|
||||||
|
self.grid_rowconfigure(0, weight=1)
|
||||||
|
|
||||||
|
# --- Frame da Esquerda para os ActionCards ---
|
||||||
|
left_frame = tk.Frame(self, bg="#1e1e1e")
|
||||||
|
left_frame.grid(row=0, column=0, sticky="nsew", padx=20, pady=20)
|
||||||
|
|
||||||
def executar(self):
|
# Configura um grid dentro do frame da esquerda para os cards
|
||||||
self.janela_principal();
|
left_frame.grid_columnconfigure((0, 1), weight=1)
|
||||||
|
left_frame.grid_rowconfigure((0, 1), weight=1)
|
||||||
|
|
||||||
|
# --- Frame da Direita para Controles e Botão ---
|
||||||
|
right_frame = tk.Frame(self, bg="#1e1e1e")
|
||||||
|
right_frame.grid(row=0, column=1, sticky="nsew", padx=20, pady=20)
|
||||||
|
right_frame.grid_columnconfigure(0, weight=1)
|
||||||
|
# As rows do frame da direita não precisam expandir, então não configuramos rowconfigure
|
||||||
|
|
||||||
def janela_principal(self):
|
# --- Criando e posicionando os CARDS ---
|
||||||
self.root.mainloop()
|
# Exemplo de comandos. Troque isso pelas suas funções reais.
|
||||||
|
cmd_pets = lambda: messagebox.showinfo("Ação", "Abrir gerenciamento de Pets")
|
||||||
|
cmd_pessoas = lambda: messagebox.showinfo("Ação", "Abrir gerenciamento de Pessoas")
|
||||||
|
cmd_adocoes = lambda: messagebox.showinfo("Ação", "Abrir tela para nova adoção")
|
||||||
|
cmd_historico = lambda: messagebox.showinfo("Ação", "Abrir histórico de adoções")
|
||||||
|
|
||||||
app = interfaceGUI()
|
card1 = ActionCard(left_frame, controller, "Gerenciar Pets", "Adicionar, editar e remover pets", cmd_pets)
|
||||||
app.executar()
|
card1.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
card2 = ActionCard(left_frame, controller, "Gerenciar Pessoas", "Cadastrar adotantes e doadores", cmd_pessoas)
|
||||||
|
card2.grid(row=0, column=1, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
card3 = ActionCard(left_frame, controller, "Realizar Adoção", "Iniciar um novo processo de adoção", cmd_adocoes)
|
||||||
|
card3.grid(row=1, column=0, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
card4 = ActionCard(left_frame, controller, "Histórico", "Consultar adoções realizadas", cmd_historico)
|
||||||
|
card4.grid(row=1, column=1, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
# --- Criando os widgets no FRAME DA DIREITA ---
|
||||||
|
|
||||||
|
# Frame para "Configurações"
|
||||||
|
settings_frame = tk.LabelFrame(
|
||||||
|
right_frame,
|
||||||
|
text="Configurações Gerais",
|
||||||
|
font=controller.title_font,
|
||||||
|
bg="#2d2d2d",
|
||||||
|
fg="white",
|
||||||
|
padx=15,
|
||||||
|
pady=15
|
||||||
|
)
|
||||||
|
settings_frame.pack(fill="x", expand=False, pady=(0, 20)) # pady adiciona espaço abaixo
|
||||||
|
|
||||||
|
tk.Label(settings_frame, text="Nome do Relatório:", font=controller.label_font, bg="#2d2d2d", fg="white").pack(anchor="w")
|
||||||
|
tk.Entry(settings_frame, bg="#4a4a4a", fg="white", insertbackground="white", relief="flat").pack(fill="x", pady=(2, 10))
|
||||||
|
|
||||||
|
tk.Label(settings_frame, text="Salvar em:", font=controller.label_font, bg="#2d2d2d", fg="white").pack(anchor="w")
|
||||||
|
tk.Entry(settings_frame, bg="#4a4a4a", fg="white", insertbackground="white", relief="flat").pack(fill="x", pady=(2, 10))
|
||||||
|
|
||||||
|
# Botão START
|
||||||
|
start_button = tk.Button(
|
||||||
|
right_frame,
|
||||||
|
text="INICIAR",
|
||||||
|
font=controller.title_font,
|
||||||
|
bg="#6be2e8", # Azul-ciano da imagem
|
||||||
|
fg="#1e1e1e", # Texto escuro para contraste
|
||||||
|
activebackground="#88f0f8",
|
||||||
|
relief="flat",
|
||||||
|
pady=10
|
||||||
|
)
|
||||||
|
start_button.pack(fill="x", side="bottom")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = InterfaceGUI()
|
||||||
|
app.mainloop()
|
Loading…
Reference in New Issue