Aplicações de mesa
Uma janela nativa em macOS, Windows e Linux — com zero dependência, e testável sem display.
O Tk vem na biblioteca padrão do Python, e é a única forma de desenhar uma janela nativa nos três sistemas sem trazer nada de fora. Qt, GTK e wx dariam mais controle e quebrariam a única promessa inegociável do projeto.
dataforge
adopt Arcane.Janela as J
action tela(t):
t.titulo("Cadastro")
nome := t.entrada("Nome", "")
given t.botao("Salvar"):
t.aviso($"salvo: {nome}")
// Com display, abre a janela. Sem, a Sonda exercita a MESMA tela.
given J.tem_display():
out "aqui eu abriria: J.abrir(J.app(\"Cadastro\"), tela)"
otherwise:
out "sem display — e a tela continua testável"
s := J.testar(tela)
s.digitar("Nome", "café")
s.clicar("Salvar")
assert s.tem("salvo: café")
out s.texto()A forma é a da Vitrine#
E isso não é coincidência: o programa inteiro roda de novo a cada interação, e o estado sobrevive. É o que dispensa callback, diffing e a pergunta "onde fica o estado" — e é o que torna uma tela testável.
| Callback (Tk cru, Qt) | Reexecução (aqui, e na Vitrine) | |
|---|---|---|
| onde mora o estado | espalhado em widgets | no vault da aplicação |
| ler um campo | entry.get() | nome := t.entrada("Nome") — a própria chamada |
| redesenhar | você lembra de fazer | acontece |
| testar | precisa de display e de robô | J.testar(tela) |
| o custo | — | a tela roda inteira a cada clique |
Começar#
bash
$ dataforge desktop novo caixa
$ cd caixa
$ dataforge test # a tela, sem abrir janela
$ dataforge desktop rodar src/main.dfO esqueleto separa src/tela.df de src/main.df, e a razão é a mesma do Kiln (server monta, ignite sobe): um teste que importasse o módulo da tela abriria a janela e nunca terminaria.
O que ela NÃO é#
- Não há animação, tema por componente, arrastar-e-soltar nem gráfico interativo.
- Para painel de dados existe a Vitrine, que roda no navegador e desenha 27 tipos de gráfico.
- Esta peça é para a ferramenta interna de mesa — a que lê um arquivo, mostra uma tabela, tem quatro botões, e precisa rodar numa máquina sem navegador.