Antes de instalar o Python e o VS Code, faça alguns ajustes que evitam dores de cabeça:
C:\Projetos.PowerShell (como usuário):
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Get-ExecutionPolicy # deve mostrar RemoteSigned
Se não quiser alterar a política, use o Prompt de Comando (CMD) para
ativar o venv.
Instale o Python 3.11+ (ou mais recente) e garanta o pip e o Python Launcher (py):
winget install -e --id Python.Python.3
py --version
python --version
pip --version
Se pip não aparecer, tente
py -m ensurepip --upgrade e py -m pip --version.
py para garantir a versão correta do Python no Windows:
py -3.11 -m venv .venv.
winget install -e --id Microsoft.VisualStudioCode
mkdir C:\Projetos\desktop-flet
cd C:\Projetos\desktop-flet
# PowerShell
py -m venv .venv
# Ativar (PowerShell):
. .\.venv\Scripts\Activate.ps1
# ou (CMD):
.venv\Scripts\activate
# Atualizar pip:
python -m pip install --upgrade pip
.venv.(.venv). Tudo que instalar com pip ficará
isolado nesta pasta.
(.venv) C:\Projetos\desktop-flet> pip install flet
# (opcional) salvar dependências
(.venv) > pip freeze > requirements.txt
Se ocorrer erro de permissão/SSL, veja o Tópico 9 – Problemas comuns.
main.py na raiz do projeto e cole:
import flet as ft
def main(page: ft.Page):
page.title = "Hello, Flet!"
page.window_width, page.window_height = 800, 500
titulo = ft.Text("Clique no botão para alterar o texto")
contador = ft.Text("Cliques: 0")
clicks = 0
def on_click(e):
nonlocal clicks
clicks += 1
titulo.value = "Olá, Flet! 🎉"
contador.value = f"Cliques: {clicks}"
page.update()
page.add(
ft.Column(
[
titulo,
ft.ElevatedButton("Clique aqui", on_click=on_click),
contador,
],
alignment=ft.MainAxisAlignment.CENTER,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
expand=True,
)
)
if __name__ == "__main__":
ft.app(target=main)
(.venv) C:\Projetos\desktop-flet> python main.py
Conceitos usados: Page, Controls (Text, ElevatedButton, Column),
eventos e page.update().
desktop-flet/
.venv/ # ambiente virtual (não commitar)
app/
ui/ # telas e componentes
services/ # regras de negócio
data/ # persistência (repos, conexões)
assets/ # imagens, ícones, etc.
main.py # ponto de entrada
requirements.txt
.gitignore
README.md
Esta separação prepara o terreno para as próximas semanas (menus, rotas, persistência e projeto final).
.venv/
__pycache__/
*.pyc
*.pyo
*.pyd
.env
.vscode/
build/
dist/
*.spec
Crie uma configuração de depuração para rodar com F5:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: main.py (venv)",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\\main.py",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
.venv (Ctrl+Shift+P → Python: Select
Interpreter). Agora, F5 executa seu app.py em vez de
python; reinstale marcando “Add python.exe to PATH”.py -m pip install <pacote>;
verifique py -m ensurepip --upgrade.Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned e reabra o
terminal.where python e
pip show flet; instale no venv certo.C:\Program Files; use
pastas do usuário.C:\Projetos).
git init
git add .
git commit -m "Semana 3: projeto Flet inicial"
pip freeze > requirements.txt
# Em outra máquina:
py -m venv .venv
. .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
README.md como rodar o projeto (comandos e capturas).// .vscode/settings.json
{
"python.defaultInterpreterPath": ".venv\\Scripts\\python.exe",
"python.analysis.typeCheckingMode": "basic",
"editor.formatOnSave": true,
"python.formatting.provider": "black"
}
C:\Projetos\desktop-flet, inicie o venv e instale flet.python main.py.TextField para o nome e um botão “Saudar”. Ao clicar, exiba
“Olá, <nome>!” no centro da tela.IconButton (ícone de +) e um
Text mostrando o total.Column centralizada; ajuste window_width e
window_height.requirements.txt e um README.md com passos de execução.Desktop_Semana03_NomeSobrenome.pdf contendo:
pip show flet.requirements.txt (contendo flet).| Critério | Descrição | Pontos |
|---|---|---|
| Ambiente | venv ativo, Flet instalado e documentado | 0–2,0 |
| Hello, Flet! | App abre janela nativa sem erros | 0–2,0 |
| Interação | Saudação com TextField + botão | 0–2,5 |
| Contador | IconButton incrementando valor na tela | 0–2,0 |
| Documentação | requirements.txt + resumo claro | 0–1,5 |
| Total | 10,0 | |