🧩 Exercícios: Interfaces Gráficas Desktop com CustomTkinter / Tkinter e MVC
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- 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)
- Salve o arquivo como:
Atividade_17_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_17_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_17_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_17_4_SeuNome - 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 |