🧰 Semana 2 – Frameworks e Escolha do Flet

📌 Tópico 1 – Biblioteca vs. Framework

Biblioteca é um conjunto de funções/objetos que você chama quando quer (você controla o fluxo). Framework fornece estrutura, ciclo de vida e convenções; ele “chama” seu código em pontos específicos.

  • Biblioteca: mais liberdade, porém mais decisões (estrutura, padrões, convenções).
  • Framework: produtividade e consistência, com curva de aprendizagem das regras do jogo.
Para turmas iniciantes, frameworks com boas convenções aceleram a entrega sem perder qualidade.
🗺️ Tópico 2 – Panorama: Tkinter, PyQt/PySide, Kivy, Electron, Flet
Opção Pontos Fortes Desafios Uso típico
Tkinter (stdlib) Vem com o Python, simples, leve. Widgets limitados, visual mais “cru”. Iniciação, ferramentas internas simples.
PyQt / PySide Conjunto de widgets muito completo, visual nativo. Mais complexo; licenciamento/empacotamento demandam atenção. Apps profissionais com UI rica e nativa.
Kivy Multiplataforma (inclui mobile), interface moderna e customizável. Paradigma próprio; estilo não nativo. Apps multimídia, touch, mobile/desktop.
Electron (JS/HTML/CSS) UI web, componentes ricos, ecossistema JS. Consumo de memória/CPU, stack JS. Apps tipo Slack/VS Code, com devs JS.
Flet (Python, inspirado no Flutter) Produtivo, multiplataforma (web/desktop), API simples em Python. Ecossistema menor que Qt; depende do runtime Flet. Ensino, protótipos rápidos, sistemas desktop/web em Python.

Observação: “melhor” depende do contexto (equipe, prazo, requisitos de UI, acesso a hardware, distribuição, etc.).

✨ Tópico 3 – Por que Flet?
  • Produtividade: poucos arquivos para iniciar, curva suave para iniciantes.
  • Multiplataforma: roda como desktop e também como web/app hospedado.
  • API clara: controles (Text, TextField, Button, ListView, NavigationRail etc.).
  • Arquitetura: modelo reativo simples (atualiza controles e chama page.update()).
  • Empacotamento: gerar executável com flet pack (veremos na Semana 11).
Para esta disciplina, Flet equilibra aprendizado rápido e entrega de projetos com navegação, rotas e persistência.
🏗️ Tópico 4 – Estrutura mínima de um app Flet

Abaixo, dois passos clássicos: “Hello, Flet!” e um botão que altera texto.

1) Hello, Flet!
import flet as ft

def main(page: ft.Page):
    page.title = "Hello, Flet!"
    page.add(ft.Text("Olá, Flet!"))

ft.app(target=main)
2) Evento de clique (atualizando UI)
import flet as ft

def main(page: ft.Page):
    titulo = ft.Text("Clique no botão")
    def on_click(e):
        titulo.value = "Clicou!"
        page.update()

    page.add(titulo, ft.ElevatedButton("Clique", on_click=on_click))

ft.app(target=main)

Conceitos-chave: Page, Controls, eventos e page.update().

🧭 Tópico 5 – Guia de decisão (qual escolher?)
Cenário Requisito-chave Sugestão
Preciso de UI nativa complexa, treeviews avançados, impressão fina Widgets ricos e maturidade PyQt/PySide
Quero começar rápido com Python e publicar também na web Produtividade + multiplataforma Flet
App simples interno, sem dependências pesadas Leve e direto Tkinter
Equipe domina JS e quer UI web moderna Stack JS, componentes web Electron
Preciso rodar também em mobile com alto controle visual Multiplataforma incluindo mobile Kivy

Obs.: em projetos reais, avalie também distribuição, suporte, comunidade e prazos.

🛠️ Prática Guiada – Semana 2
  1. Ambiente: crie e ative um venv, instale flet (pip install flet).
  2. Hello, Flet!: rode o exemplo do Tópico 4 (1) e tire um print da janela.
  3. Eventos: implemente o exemplo do Tópico 4 (2). Altere a mensagem e adicione um contador de cliques.
  4. Exploração: troque o ElevatedButton por um IconButton e personalize o texto (tamanho, negrito).
Se o laboratório for modesto, feche outras janelas para economizar RAM/CPU. Teste em resolução 1280×720.
📝 Tarefas / Entrega – Semana 2
  • PDF único chamado Desktop_Semana02_NomeSobrenome.pdf contendo:
    • Print do Hello, Flet! rodando.
    • Print do app com contador e mensagem personalizada.
    • Breve justificativa (5–8 linhas): “Por que o Flet é adequado para nosso curso?”
  • Prazo: até domingo 23:59.
📏 Rubrica (0–10)
Critério Descrição Pontos
Ambiente venv criado/ativado + flet instalado 0–2,0
Hello, Flet! Print e execução corretos 0–2,0
Eventos Botão funcional + contador 0–3,0
Personalização IconButton/estilo aplicado 0–1,0
Justificativa Clara, objetiva, 5–8 linhas 0–2,0
Total 10,0