Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 17.1 — Janela Principal e Componentes Básicos (Label, Entry, Button)

Contexto: Janela Principal e Componentes Básicos (Label, Entry, Button) no contexto de Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC.

Requisitos de Execução:

  1. Criar janela Desktop com formulário de autenticação e feedback visual de ação.

Resultado Esperado

Interface Desktop inicializada com arquitetura orientada a eventos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_1_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC
🔑 Gabarito de Código & Solução Comentada
import tkinter as tk

def criar_app() -> tk.Tk:
    root = tk.Tk()
    root.title("Portal Corporativo Python")
    root.geometry("400x200")
    
    lbl = tk.Label(root, text="Autenticacao Corporativa", font=("Arial", 14))
    lbl.pack(pady=10)
    return root

if __name__ == "__main__":
    app = criar_app()
    print("Janela Desktop configurada com sucesso.")

🔍 Nível 2: Prática

Problema 17.2 — Arquitetura Model-View-Controller (MVC) para Aplicações Desktop

Contexto: Arquitetura Model-View-Controller (MVC) para Aplicações Desktop no contexto de Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC.

Requisitos de Execução:

  1. Separar lógica de visualização da lógica de negócio através de Controller mediador.

Resultado Esperado

Padrão MVC desacoplando modelo de dados da interface gráfica.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_2_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC
🔑 Gabarito de Código & Solução Comentada
class Modelo:
    def autenticar(self, u: str, p: str) -> bool:
        return u == "admin" and p == "secret"

class Controlador:
    def __init__(self, modelo: Modelo) -> None:
        self.modelo = modelo

    def on_login(self, u: str, p: str) -> str:
        return "ACESSO_LIBERADO" if self.modelo.autenticar(u, p) else "NEGADO"

ctrl = Controlador(Modelo())
print("Status Login:", ctrl.on_login("admin", "secret"))

⚡ Nível 3: Integração

Problema 17.3 — Threading em GUI para Prevenir Congelamento da Interface (Freeze)

Contexto: Threading em GUI para Prevenir Congelamento da Interface (Freeze) no contexto de Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC.

Requisitos de Execução:

  1. Executar tarefas demoradas em thread secundária atualizando a UI através de callbacks de thread principal.

Resultado Esperado

Interface responsiva sem travamento durante operações de rede/banco.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_3_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC
🔑 Gabarito de Código & Solução Comentada
import threading
import time

def tarefa_background(callback) -> None:
    time.sleep(0.05)
    callback("PROCESSO_CONCLUIDO")

def atualizar_ui(msg: str) -> None:
    print(f"UI Atualizada na thread principal: {msg}")

t = threading.Thread(target=tarefa_background, args=(atualizar_ui,))
t.start()
t.join()

🏆 Nível 4: Desafio Corporativo

Problema 17.4 — Tematização Moderna com CustomTkinter (Dark/Light Mode)

Contexto: Tematização Moderna com CustomTkinter (Dark/Light Mode) no contexto de Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC.

Requisitos de Execução:

  1. Configurar layout moderno com cantos arredondados e suporte nativo a Dark Mode.

Resultado Esperado

Interface Desktop corporativa com visual moderno e transição de temas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_4_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC
🔑 Gabarito de Código & Solução Comentada
import customtkinter as ctk

def inicializar_tema_corporativo() -> None:
    ctk.set_appearance_mode("dark")
    ctk.set_default_color_theme("blue")
    root = ctk.CTk()
    root.title("Portal Corporativo Dark Mode")
    btn = ctk.CTkButton(root, text="Salvar Alteracoes", corner_radius=8)
    btn.pack(padx=20, pady=20)

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos