Conheça o Adianti Framework para PHP:

  • Desenvolvimento com componentes;
  • Formulários e datagrids.
  • Versão Web e Desktop (Gtk);
  • Multiplataforma;
  • Desenhe as interfaces;
  • IDE própria (Adianti Studio).
Ver detalhes...

Construindo Interfaces com PHP-GTK

Para prosseguir com o download do artigo, é necessário realizar login utilizando o Facebook ou Google. Este procedimento é totalmente seguro e nossa aplicação é certificada por ambos os serviços. Após a autenticação, você será direcionado de volta à nossa página para continuar o download.

Login com Facebook Login com Google

Resumo

Introdução No primeiro artigo da série, conhecemos o PHP-GTK, extensão da linguagem de programação PHP, que nos permite desenvolver aplicações gráficas standalone. Neste segundo artigo, iremos estudar as diversas formas de se construir uma interface. Hierarquia de classes A biblioteca GTK é um formada por um conjunto de classes, organizadas hierarquicamente e que disponibilizam uma interface totalmente orientada a objetos, permitindo reproveitamento de código através de mecanismos como a herança. A grande maioria das classes descende da super-classe GtkObject. Toda classe-filha herda automaticamente o comportamento (métodos e propriedades) da classe pai. Para exemplificarmos, todas classes descendentes de GtkBin, são contêineres que podem conter um elemento em seu interior. Já as classes descendentes de GtkBox, podem conter vários. Empacotamento A primeira forma de construirmos a interface gráfica é através do empacotamento de objetos, ou seja, colocando uns objetos dentro de outros. Para tal, é necessário entender quais objetos permitem que se adicione conteúdo (contêineres) e quais não. Em princípio, objetos descendentes da classe GtkContainer podem conter outros elementos dentro de si. Neste primeiro exemplo iremos construir uma janela (GtkWindow) e adicionar uma caixa horizontal em seu interior. Dentro da caixa horizontal iremos adicionar três objetos, dois rótulos de texto (GtkLabel), sendo um em cada extremidade e uma caixa vertical no centro, sendo que esta caixa vertical contém outros três objetos do tipo GtkLabel (rótulos de texto). Observe que podemos construir a interface recursivamente, colocando objetos dentro de objetos. set_size_request(300,200); $janela->set_border_width(20); $janela->set_title('Título da Janela'); // cria boxes $caixa_vert= new GtkVBox; $caixa_horz= new GtkHBox; // adiciona caixa horizontal na janela $janela->add($caixa_horz); // adiciona elementos na caixa horizontal $caixa_horz->pack_start(new GtkLabel('elemento1')); $caixa_horz->pack_start($caixa_vert); $caixa_horz->pack_start(new GtkLabel('elemento2')); // adiciona elementos na caixa vertical $caixa_vert->pack_start(new GtkLabel('elementoA')); $caixa_vert->pack_start(new GtkLabel('elementoB')); $caixa_vert->pack_start(new GtkLabel('elementoC')); // exibe a janela $janela->show_all(); Gtk::Main(); ?> Posições Fixas Se você considera a construção do visual da aplicação baseado no empacotamento um trabalho complexo demais, existe uma forma de construir a interface baseado em posições fixas. O GTK possui um contêiner chamado GtkFixed, que proporciona uma área na qual os objetos podem ser ancorados em coordenadas absolutas definidas em pixels. No exemplo a seguir, estamos criando um objeto chamado $fixed_area, que é justamente um objeto do tipo GtkFixed, dentro da janela. A partir disto, estamos colocando vários objetos em seu interior, sempre definindo a posição em termos de coluna e linha por meio do método put(). set_size_request(300,200); $janela->set_border_width(20); $janela->set_title('Título da Janela'); // cria fixed $fixed_area= new GtkFixed; // adiciona área fixa na janela $janela->add($fixed_area); // instancia diversos objetos $rotulo1 = new GtkLabel('elemento1'); $rotulo2 = new GtkLabel('elemento2'); $botao = new GtkButton('clique aqui'); $check = new GtkCheckButton('checkbutton'); $radio = new GtkRadioButton(null, 'radiobutton'); $combo = new GtkCombo; // coloca objetos na área fixa $fixed_area->put($rotulo1, 10, 10); $fixed_area->put($rotulo2, 140, 10); $fixed_area->put($botao, 10, 50); $fixed_area->put($check, 120, 50); $fixed_area->put($radio, 120, 80); $fixed_area->put($combo, 0, 120); // exibe a janela $janela->show_all(); Gtk::Main(); ?> Glade Até o momento, construimos o visual da aplicação via programação. Esta forma de desenvolvimento leva a aplicação à uma maior performance, mas por outro lado, não é tão produtiva para programadores acostumados com ambientes RAD. Para situações em que precisamos de maior agilidade no desenvolvimento visual da aplicação, podemos utilizar o Glade. O Glade é uma ferramenta construída especialmente para desenho visual de aplicações GTK. O Glade pode ser utilizado em conjunto com todas linguagens que suportam o GTK. O Glade disponibiliza ao programador uma paleta de componentes e uma janela de propriedades que propiciam a construção de interfaces por meio de recursos como o clique e arraste, dentre outros. O resultado final do arquivo salvo pelo Glade é um documento XML com a extensão .glade. Na aplicação a seguir, estamos utilizando a interface criada na figura anterior. Veja que para interpretar o documento Glade, precisamos fazer uso da classe GladeXML. Esta classe retorna um objeto $glade, que disponibiliza acesso à todos objetos contidos dentro do documento. Para obtermos tais objetos, precisamos executar o método get_widget(), que recebe o nome do objeto (dado na janela de propriedades) e retorna o objeto correspondente, como se ele fosse instanciado naquele momento. get_widget('window1'); // obtém o campo para digitação do nome da pessoa $nome = $glade->get_widget('nome_pessoa'); // joga um texto dentro do campo $nome->set_text('digite o nome aqui...'); // exibe a janela $janela->show_all(); Gtk::Main(); ?> Conclusão Neste artigo apenas vimos como construir uma interface inanimada. No próximo artigo da série, iremos estudar como se dá a programação de eventos, que irá possibilitar escrevermos funções que reagem às ações que usuário toma frente à aplicação. Referências e links sugeridos [PHP-GTK Brasil] - http://www.php-gtk.com.br [Livro PHP-GTK] - http://www.php-gtk.com.br/book [Site do Autor] - http://www.pablo.blog.br Sobre o Autor Pablo Dall'Oglio é graduado em Análise de Sistemas pela UNISINOS. Autor do livro sobre PHP-GTK pela novatec editora. Programa em PHP-GTK desde sua criação em 2001. É membro do time de documentação e criador da comunidade brasileira de PHP-GTK (www.php-gtk.com.br). Atualmente, é diretor de tecnologia e proprietário da Adianti Solutions (www.adianti.com.br) onde atua como consultor de tecnologia e engenheiro de software. Pode ser contatado pelo e-mail pablo@php.net.