• Home
  • Projetos
  • Palestras
  • Artigos
  • Livros

Construindo Interfaces com PHP-GTK

Construindo Interfaces com PHP-GTK

Para receber o artigo, informe abaixo seu email:
Email:

Keyworkds:

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.

Livros


  • Outros

    • Galeria de Fotos
    • Posts no Codare

    Arquivo

    • 2009
    • 2008
    • 2007
    • 2006
    • 2005
    • 2004
  • Google

    Blogroll

    • Adler Medrado
    • Aurélio Jargas
    • Andrei Zmievski
    • Eduardo Maçan
    • Efetividade
    • Er Galvão
    • Joel on Software
    • Marcelio Leal
    • Martin Fowler
    • Miguel de Icasa
    • Newton Wagner
    • Rafael Dohms
    • Rasmus Lerdorf
    • Sérgio Crespo
    • Timoty Ney

    Posts Aleatórios

    • 7o Fórum Internacional de Software Livre
    • Experiências de um desenvolvedor de software livre
    • Lançamento: PHP Programando com Orientação a Objetos
    • Onde está o Pablo ?
    • Cataratas do Iguaçu
    • Escritório de nerd imitando de executivo
    • 2 Workshop PHPMS
    • Implantação do GNUTeca na ESMP
    • GNUTeca no Rio
    • III Seminário de Desenvolvimento de Software Livre
    • Palestra em Belém
    • De volta ao papel
    • PHPMagazine 05 disponível
    • PHP Programando com Orientação a Objetos :: Segunda Edição
    • II Forum Gnome
    • Acessando o Gmail do PHP
    • 6o. Fórum Internacional de Software Livre
    • Piratas do Vale do Silício
    • 1o PHPDF Road Show
    • PHP Road Show
 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

© 2006 Wordpress Themes | Theme (Not so) Fresh
XHTML CSS