Pular para o conteúdo

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 estadoespalhado em widgetsno vault da aplicação
ler um campoentry.get()nome := t.entrada("Nome") — a própria chamada
redesenharvocê lembra de fazeracontece
testarprecisa 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.df

O 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.