Capítulo 17: Interfaces Gráficas Desktop Modernas com CustomTkinter / Tkinter e Padrão MVC
Especialização em Sistemas com Python & POO com Type Hints • Capítulo 17
🗺️ Mapa Conceitual do Tópico
flowchart TD
A["Loop Principal da GUI: mainloop()"] --> B["Renderização de Telas e Widgets"]
B --> C["Camada View: Tkinter / CustomTkinter"]
C -->|Eventos de Clique / Digitação| D["Camada Controller: Validações e Regras"]
D -->|Persistência e Estado| E["Camada Model: Dataclasses e SQLite DAO"]
style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style C fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style D fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
style E fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🖥️ 1. Programação Orientada a Eventos e Padrão MVC
Interfaces gráficas desktop operam em um loop de despacho de eventos (mainloop):
- Padrão MVC: Desacopla a interface visual (View) da lógica de negócios (Controller) e dos dados (Model).
- Layout Managers: Gerenciamento profissional de grades (
grid) e empacotamento (pack). - CustomTkinter: Biblioteca moderna que adiciona temas automáticos Dark/Light Mode e cantos arredondados ao Tkinter nativo.
💻 Exemplo Prático e Tipado
"""
exemplo_17_interface_grafica_desktop.py - Janela Básica Tkinter com MVC
"""
import tkinter as tk
from tkinter import messagebox
class AppSaudacao:
def __init__(self, root: tk.Tk) -> None:
self.root = root
self.root.title("Exemplo Desktop GUI")
self.root.geometry("350x180")
self.label = tk.Label(root, text="Digite seu nome:", font=("Helvetica", 11))
self.label.pack(pady=5)
self.entry = tk.Entry(root, width=25)
self.entry.pack(pady=5)
self.btn = tk.Button(root, text="Confirmar", command=self.on_confirmar, bg="#157878", fg="white")
self.btn.pack(pady=10)
def on_confirmar(self) -> None:
nome = self.entry.get().strip()
if not nome:
messagebox.showwarning("Aviso", "Por favor, digite um nome.")
return
messagebox.showinfo("Saudação", f"Olá, {nome}! Bem-vindo ao Python Desktop.")
if __name__ == "__main__":
janela = tk.Tk()
app = AppSaudacao(janela)
janela.mainloop()
🔗 Recursos Pedagógicos do Capítulo 17
| Recurso Didático | Finalidade | Link de Acesso |
|---|---|---|
| 📊 Slides de Aula | Apresentação visual interativa com Dark Mode e suporte a teclado | Ver Slides |
| 🧠 Quiz Formativo | Teste interativo de fixação com feedback imediato por alternativa | Fazer Quiz |
| 💻 Exemplos de Código | Demonstrações funcionais com Type Hints e saída no console | Ver Exemplos |
| 🧩 Exercícios em 4 Níveis | Lista progressiva de fixação com gabarito em bloco colapsável | Resolver Exercícios |
| 💾 Capítulo Anterior | 📚 Sumário de Tópicos | 🏗️ Próximo Capítulo |