Eagle é uma camada de abstração acima de Toolkits Gráficos para deixar programação GUI o mais fácil possível. A Eagle possibilita isso reduzindo o que pode ser feito, porém provê componentes de alto nível com uma API fácil de usar.
Eagle não foi feita para criar qualquer interface de usuário, mas
sim focada em interfaces específicas com 5 áreas (esquerda,
direita, cima, baixo e centro), cada uma provê barras de rolagem
e componentes de "layout" para conteúdo: esquerda,
direita e centro provem barras de rolagens e layout verticais,
enquanto cima e baixo usam horizontal. Eagle trata cada janela como
uma aplicação (App), porém seu
aplicativo pode ter várias destas.
Cada App provê uma janela de
preferências, uma sub-janela presa a ela e que será responsável
por salvar e recuperar o valor de seus componentes automaticamente
junto com outros componentes persistentes da App.
Todo componente tem um nome de identificação (id) e pode ser
acessado por ele, portanto você pode evitar variáveis globais
para acessar componentes. Cada id tem o escopo da aplicação a qual
ele pertence e portanto uma instância de componente pode estar em
apenas uma App. Você também pode
acessar as instâncias dos componentes com , get_widget_by_id( id, )app_idapp_id pode ser omitido, a primeira aplicação
declarada será usada, isto é útil quando você tem apenas uma,
economizando digitação. Alguns componentes não precisam receber um
id (App, botões customizados como CloseButton) já que você geralmente não usa
seus ids diretamente (provavelmente eles já fazem tudo, como
QuitButton que sai do programa),
estes serão nomeados sequencialmente. Todo widget pode ser acessador usando a
sintaxe de dicionário do Python, sendo a chave o id.
Todos os componentes de entrada podem ser persistentes, isto é,
seus conteúdos serão salvos em um arquivo depois de modificados
e serão carregados automaticamente deste arquivo quando a
aplicação iniciar. Componetes que estão nas preferências da
App serão marcados como persistentes
automaticamente, outros componentes devem ser marcados com o
parâmetro .
persistent=True
Todos os componetes de entrada ou saída têm uma API comum
para mudar/pegar o seu valor, você pode usar os métodos ou set_value( new_value ) se você
gosta de Programação Orientada a Objetos ou você pode usar as
funções get_value() ou set_value( component_id, new_value ), app_id se não gosta. Eagle
tem um suporte especial para componentes de entrada e saída
se você usar a sintaxe de dicionário: ele já usa automaticamente
get_value( component_id, )app_idset_value ou get_value conforme necessário:
# é mais fácil escrever
valor = minha_app[
"my_widget" ]
minha_app[ "my_widget" ] = valor
# do que
meu_widget = get_widget_by_id( minha_app, "meu_widget"
)
valor = meu_widget.get_value()
meu_widget.set_value( valor )
Exemplo de acesso usando a sintaxe de dicionário.
Componentes de entrada e Botões provem um "callback" (uma função
que será chamada pela biblioteca) para notificar qualquer ação.
Os componentes de entrada chamam a função com app_id, component_id e
valor como parâmetros quando seu conteúdo muda, enquanto botões
chamam a função com app_id e component_id quando clicado.
Eagle, diferentemente de outros toolkits como GTK, Qt, Tk e
outros, não provê vários callbacks para o mesmo componente, como
duplo-clique ou mouse-over, apenas o callback que faz mais
sentido. Isso deixa a programação muito mais fácil e a GUI com
usabilidade consistente. Porém existem algumas exceções: App provê 2 callbacks: um para notificar que
algum dado foi alterado (se você usa o mesmo callback para todo
componente de entrada, você pode usar esse e evitar digitação!) e
outro que é chamado antes da App
fechar, Canvas ao redimensionar em
adição às callbacks eventos de mouse, Table para quando a seleção mudou em adição
às callbacks para quando os dados mudaram.
Show room da Eagle.
Show room da Eagle com anotações.