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