Você está na página 1de 19

PHP-GTK2 - Tutorial de instalao e inicializao

Este tutorial tem como objetivo dar informaes bsicas para aqueles que desejam se aventurar com essa ferramenta.
Publicado em: 09/01/2009 | Autor: Redao Oficina da Net | Categoria: PHP Este tutorial tem como objetivo dar informaes bsicas para aqueles que desejam se aventurar com essa ferramenta. PHP-GTK2 um conjunto de extenses do PHP que permitem a voc criar aplicaes Cliente-Servidor. uma espcie de Visual Basic ou Delphi, s que utilizando a linguagem PHP e a interface grfica do GTK2. O GTK (Gimp Tool Kit) foi a princpio desenvolvido para o projeto Gimp e acabou se tornando amplamente utilizado no mundo dos softwares livres. O gerenciador de janelas GNOME, por exemplo, baseado em GTK. Foram criados diversos "bindinds" para ela, e algum (Andrei Zmievski) teve a feliz idia de un-la com o PHP. Dentre as principais caractersticas do PHP-GTK2, podemos citar:

Portabilidade: Voc pode escrever aplicaes e execut-la em vrios ambientes (Windows, Linux, Mac OS X) sem precisar alterar o cdigo fonte; Robustez: Voc pode usar todo o poder do PHP para desenvolvimento de suas aplicaes. O PHP uma linguagem robusta, bem documentada e suportada. Contm diversas extenses para vrios propsitos (Acesso a banco de dados, acesso a File System, impressoras, imagens grficas, compresso de arquivos e muito mais); Livre: O PHP-GTK2 distribudo pela LGPLv2. Voc pode baix-lo gratuitamente no site http://gtk.php.net/.

2. Pr-Requisitos
Para compreender o tutorial, interessante que voc j tenha conhecimento bsicos nos tpicos abaixo:

PHP; Programao cliente-servidor / orientada a eventos; SQL;

3. Instalando o PHP-GTK2
O PHP-GTK2 pode ser baixado no seguinte endereo: http://gtk.php.net/download.php Voc pode baixar os fontes ou os binrios pr-compilados (esses ltimos no Windows).

3.1. Instalando do Linux


A maioria das distribuies j vem com o PHP instalado por padro. Certifique-se apenas de que ela seja no mnimo a verso 5.1 e que tenha suporte ao cli. Voc pode conferir isso com o comando abaixo:

php -v O que voc precisa fazer aps baixar o PHP-GTK2 (e compil-lo, caso voc tenha baixado os fontes) adicionar a linha abaixo no seu php.ini extension=php_gtk2.so Dependendo da sua distribuio, o PHP-GTK2 estar disponvel na ferramenta de download e instalao de pacotes (apt-get, yum, etc). A instalao por essa via bem mais simples! A execuo das aplicaes feita da seguinte forma: php nome_arquivo_principal[PG1]

3.2. Instalando no Windows


No Windows, a instalao dos binrios disponveis no site do PHP-GTK2 (binary pack e binary extensions pack) so suficientes para executar aplicaes bsicas do PHP-GTK2. Para utilizar as demais extenses do PHP, voc deve baixar o instalador do PHP do site oficial do PHP (http://php.net). Voc pode seguir o procedimento abaixo (vlido para o PHP-GTK2 verso 2.0.1):

Baixe o binary_pack e o extensions_pack do site php-gtk2: Descompacte os arquivos baixados e coloque-os na pasta c:php_gtk2 (no nome da pasta e o local ficam a seu critrio, apenas uma sugesto); Baixe o PHP-5.2.6_non_thread_safe do site do PHP: Durante a instalao, selecione as extenses de seu interesse, ou escolha todas. Para esse tutorial, necessrio que voc tenha as extenses PDO para o Sqlite para poder utilizar os exemplos do item 6; Ao fim da instalao, v a pasta onde esto as extenses instaladas do php (por padro, c:Arquivos de Programasphpext) e copie-as para a pasta das extenses do php-gtk2 (c:php-gtk2ext): Habilite as extenses no arquivo c:php-gtk2php-cli.ini. Para o tutorial, as extenses utilizadas as seguintes: o extension = php_pdo.dll o extension = php_pdo_sqlite.dll Para evitar problemas com charset, altere o parmetro php-gtk.codepage no arquivo c:php-gtk2phpcli.ini: o php-gtk.codepage = CP1252

A execuo das aplicaes feita da seguinte forma: php-win.exe nome_arquivo_principal

4. Conceitos Bsicos
4.1. Widgets e Sinais No mundo do PHP-GTK2 trabalhamos com widgets. Widgets so os elementos grficos que fazem parte da nossa aplicao. So exemplos de widgets botes, caixas de texto, formulrios, barras de rolagem, entre outros.

figura 01: exemplos de widgets Existem widgets que podem conter outros widgets. Estes so chamados Widgets Containers. Janelas so exemplos de Containers. H Widgets Containers que comportam apenas 1 Widget Filho (formulrio, por exemplo) e outros que podem ter vrios widgets filhos (Tabelas ou Boxes, por exemplo); Cada widget possui propriedades que podem ser especficas (cor de texto e comprimento mximo de caracteres em um campo texto, por exemplo) ou comuns a vrios widgets (largura e altura do widget). Os widgets interagem com suas aplicaes atravs de sinais. Eles permitem que voc defina o que a sua aplicao ir fazer. Por exemplo, um boto quando clicado gera o sinal clicked. Voc pode capturar esse sinal e dizer qual funo do seu cdigo ser executado. 4.2. Utilizando widgets no PHP-GTK2 para definir formulrios Com base na explicao acima, iremos criar nosso primeiro cdigo em PHP-GTK2. Para escrever seu cdigo, voc precisa utilizar um editor de texto puro (bloco de notas, kate, pspad, etc). Existem editores que destacam o cdigo fonte PHP e so uma boa pedida. Eu utilizo o kate. Para comear, iremos criar um formulrio e exibi-lo. Utilizaremos um widget do tipo Window. Digite o cdigo abaixo:
<?php $janela = new GtkWindow(); $janela->set_default_size(320,240); $janela->set_title("Formulrio PHP-GTK2"); $janela->show(); $janela->connect_simple('destroy', array('gtk', 'main_quit'));

Gtk::main(); ?>

Salve o cdigo acima como teste.phpw. Em seguida, digite o seguinte comando abaixo para execut-lo: php teste.phpw (Linux) ou php-win.exe teste.phpw (Windows) ser exibido o formulrio parecido com o da figura abaixo:

figura 02: Formulrio gerado Vamos entender o cdigo que escrevemos: $janela = new GtkWindow(); Esse comando nos diz que estamos criando (instanciando) um objeto do tipo GtkWindow. A partir dai, toda interao feita com formulrio feita atravs da varivel $janela. $janela->set_default_size(320,240); Com essa funo estamos definindo o tamanho padro do objeto formulrio (largura x altura, em pixels) $janela->set_title("Formulrio PHP-GTK2"); Aqui estamos definindo o ttulo do nosso formulrio $janela->show(); A funo show torna visvel o formulrio. $janela->connect_simple('destroy', array('gtk', 'main_quit')); Aqui estamos capturando o sinal destroy. Esse sinal lanado quando clicamos no boto fechar do nosso formulrio (cone X).A funo connect_simple nos permite definir qual funo deve ser executada quando um sinal disparado. Nesse caso, associamos a funo main_quit da classe gtk. Poderiamos tambm associar a uma funo do nosso prprio cdigo. Gtk::main(); Aqui a funo principal do programa. Seu papel manter o programa ativo atravs de um loop sem fim. Se no colocarmos essa entrada em nosso programa, seriam executados os comandos anteriores e a aplicao terminaria. Essa funo s interrompida em caso de erro ou quando executada a funo main_quit da classe Gtk .Isso explica porque conectamos o sinal destroy no comando anterior.

Um formulrio sem botes, caixas de texto, tabelas e afins no far muito coisa. Vamos alterar o nosso exemplo incluindo widget do tipo Label:
<?php $janela = new GtkWindow(); $janela->set_default_size(320,240); $janela->set_title("Formulrio PHP-GTK2 com elementos");

// Define um widget do tipo Label $Label1 = new GtkLabel("Teste de formulrio");

// Adiciona o label ao formulrio $janela->add($Label1);

$janela->show_all(); $janela->connect_simple('destroy', array('gtk', 'main_quit'));

Gtk::main(); ?>

Agora nossa sada se parece com a da figura abaixo:

figura 03: Formulrio com elementos O que alteramos foi incluir um objeto do tipo GtkLabel e vincul-lo ao nosso formulrio com a funo add. Perceba tambm que trocamos a funo show pela show_all. Ela faz com que deixemos visvel no s o formulrio, mas tambm o label. Se mantivssemos a funo show, apenas o formulrio seria exibido. Um formulrio um Widget do tipo GtkBin, ou seja, pode conter apenas um objeto filho. Um formulrio que tenha apenas um boto ou apenas uma caixa de texto no ter muita utilidade, no mesmo? Como fazemos ento para adicionar vrios objetos ao nosso formulrio?

Existem widgets que permitem que um formulrio possa ter mais do que um widget filho, alm de posicion-los uniformemente. Se voc conhece HTML, como se eles fossem uma tag DIV ou uma tag TABLE. So exemplos de elementos desse tipo:

GtkVBox: Definir divises verticais no formulrio; GtkHBox: Define divises horizontais no formulrio; GtkTable: Divide o formulrio em clulas.

Vejamos na prtica como isso funciona. Vamos alterar nosso ltimo exemplo para que o fomulrio tenha 3 elementos: Um rtulo (GtkLabel), uma caixa de texto (GtkEntry) e um boto (GtkButton). Para isso, utilizaremos um GtkVBox e um GtkHBox:
<?php $janela = new GtkWindow(); $janela->set_default_size(320,240); $janela->set_title("Formulrio PHP-GTK2 com elementos"); $Label = new GtkLabel("Nome"); $Nome = new GtkEntry(); $Botao = new GtkButton("_OK",true);

// Definimos os Boxes horinzontais e verticais. // Os parmetros "false" e "5" indicam que no queremos que os elementos tenham o // mesmo tamanho e qual o espao entre eles, respectivamente $VBox = new GtkVBox(false,5); $HBox = new GtkHBox(false,5);

// Associamos o Label e o Nome ao HBox $HBox->pack_start($Label); $HBox->pack_end($Nome);

// Associamos o HBOX e o boto ao VBox $VBox->pack_start($HBox); $VBox->pack_end($Botao);

//Associamos o VBox ao formulrio

$janela->add($VBox);

$janela->show_all(); $janela->connect_simple('destroy', array('gtk', 'main_quit'));

Gtk::main(); ?>

Agora nosso formulrio ficou assim:

figura 04: Formulrio com vrios Widgets Dividimos nosso formulrio em duas linhas (com um GtkVBox) porque adicionamos dois elementos a ele (um GtkHBox e um GtkButton). O GtkHBox por sua vez foi dividido em duas partes por terem sido adicionados dois elementos (um GtkLabel e um GtkEntry). Quem est acostumado com Visual Basic ou Delphi deve estranhar essa forma de posicionar elementos no formulrio, pois no definimos coordenadas para os nossos objetos. No entanto, possvel no PHP-GTK2 fazer da mesma forma. Para isso, temos que utilizar um objeto do tipo GtkFixed. No item 5 entraremos com mais detalhes quando estivermos trabalhando com a interface grfica.[PG2]4.3. Capturando os sinais Veremos aqui como fazer nossa aplicao interagir com o ambiente atravs dos sinais. Cada widget possui um conjundo de sinais que ele dispara em resposta a alguma ao executada pelo usurio ou o ambiente onde est sendo executado. Para capturarmos esses sinais, podemos utilizar a funo connect_simple. Atravs dela, dizemos qual funo deve ser executada quando um sinal for disparado. No nosso ltimo exemplo, definimos um formulrio com um label, caixa de texto e um boto. Vamos alter-lo de forma que quando clicarmos no boto OK seja exibido em uma caixa dilogo o contedo digitado na caixa de texto:
<?php $janela = new GtkWindow(); $janela->set_default_size(320,240); $janela->set_title("Formulrio PHP-GTK2 com elementos");

$Label = new GtkLabel("Nome"); $Nome = new GtkEntry(); $Botao = new GtkButton("_OK",true);

$VBox = new GtkVBox(false,5); $HBox = new GtkHBox(false,5);

$HBox->pack_start($Label); $HBox->pack_end($Nome);

$VBox->pack_start($HBox); $VBox->pack_end($Botao);

$janela->add($VBox);

// Associa o sinal clicked do boto a funcao fExibeTexto $Botao->connect_simple('clicked','fExibeTexto',$Nome );

$janela->show_all(); $janela->connect_simple('destroy', array('gtk', 'main_quit'));

// Essa funo ir exibir o que foi digitado no objeto do tipo GtkEntry function fExibeTexto($campotexto) { $texto = $campotexto->get_text(); $dialog = new GtkMessageDialog(null, Gtk::DIALOG_MODAL, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK, $texto ); $dialog->run(); $dialog->destroy(); }

Gtk::main(); ?>

Execute o cdigo. Digite alguma coisa no campo texto e clique em OK. Sua obter algo prximo a figura abaixo:

figura 05: Tratamento de sinais Da maneira parecida como tinhamos feito com o sinal destroy, utiliamos a connect_simple para capturar o sinal clicked do elemento GtkButton: $Botao->connect_simple('clicked','fExibeTexto',$Nome ); Indicamos que toda vez que esse sinal for disparado deve ser executada a funo fExibeTexto. Como essa funo recebe um parmetro (referncia do objeto GtkEntry), tivemos que incluir a varivel $Nome no terceiro parmetro da connect_simple. A connect_simple entende que a partir do terceiro parmetro voc est informando os valores que devem passados para a funo relacionada. A funo fExibeTexto obtem o valor que foi digitado na caixa de texto referenciada por $Nome e armazena o contedo na varivel $texto. Esta usada na criao do objeto do tipo GtkMessageDialog, para que seja exibida pela caixa de dilogo.

5. Trabalhando com a interface grfica (Glade)


Criar formulrios como demonstrado no item anterior possvel mas no muito produtivo. Dependendo da complexidade do layout, voc perde mais tempo desenvolvendo o cdigo para montar o formulrio do que na lgica principal da aplicao em si! Felizmente existem pessoas legais mundo a fora que desenvolveram uma ferramenta para facilitar nossas vidas: Existe uma aplicao chamada Glade para auxiliar nessa tarefa que, na minha opinio, a parte mais chata de um projeto, porm importante. O Glade uma ferramenta WYSIWYG. Voc pode desenhar um formulrio sem muito esforo, selecionando e o objeto que se deseja adicionar ao formulrio. Seu formulrio salvo com a extenso .glade. Esse arquivo formatado em xml e pode ser utilizado posteriormente na nossa aplicao. Veremos como utiliz-lo adiante. O Glade pode ser baixado no endereo http://glade.gnome.org/download.html (o repositrio da sua distribuio deve ter disponiblizado tambm - Sei que no repositrio do projeto Fedora existe). Nesse endereo existem

verses disponveis apenas para Linux. Se voc for utilizar no Windows, existe um port que pode ser baixado do endereo http://gladewin32.sourceforge.net/. Ao abrir o Glade, sero abertas as janelas abaixo:

figura 06: Imagem inicial do Glade


Untitled 1 - Glade: Mostra o nome do arquivo aberto e lista todos os widgets que compem o formulrio; Properties: Permite alterar os atributos e associar funes aos sinais disponveis do widget selecionado; Palette: Contm os widgets disponveis que podem ser adicionados ao projeto.

5.1. Montando o formulrio e definindo os sinais Vamos montar um formulrio utilizando o Glade. Tratalharemos com coordenadas fixas, ou seja, diremos em que posiao dentro do formulrio ele deve ficar com preciso de pixels. Para isso, utilizaremos o objeto do tipo Fixed. Apenas uma observao: Na documentao do PHP-GTK2, aconselhado que voc use o outro mtodo de posicionamento de objetos (atravs do uso de tabelas, Boxes, etc). A vantagem que voc no precisa se preocupar com redimensionamento de objetos: O GTK2 cuida disso para voc. Por outro lado, voc tem mais trabalho para montar o formulrio. Por no estar habituado com o mtodo novo, optei por usar o Fixed. Como exemplo, vamos montar uma calculadora rudimentar (para somas somente). Siga os passos abaixo:

1.Aps abrir o Glade, clique no cone Window da janela Palette: Um formulrio ser adicionado ao seu formulrio. 2. Clique no cone Fixed da janela Palette e clique dentro do formulrio. Seu formulrio ficar como o da figura abaixo:

figura 07: Formulrio com GtkFixed Na lista de widgets do formulrio, selecione o objeto window1 e modifique suas propriedades:

3. Aba "General", propriedade "Name": Substitua por frmPrincipal; Aba "Common", propriedade "Visible": Altere para Yes; Aba "Common", propriedade "Width request": Substitua por 320; Aba "Common", propriedade "Heigth request": Substitua por 240;

4. Insira 3 objetos do tipo Spin Button no formulrio. Da mesma forma que foi feito para o formulrio, altere a propriedade "Name" de cada um deles para txtValor1, txtValor2 e txtResultado, respectivamente. 5. Insira 3 objetos do tipo Label no formulrio. Posicione-os na frente dos objetos Spin Button e altere suas propriedades "Label" para Valor1, Valor2 e Resultado, respectivamente. 6. Insira um objeto do tipo Button no formulrio. Altere suas propriedades conforme abaixo: o Aba "General", propriedade "Name": Substitua por btnSomar; o Aba "General", propriedade "Label": Preencha com _Somar o Aba "General", propriedade "Use Underline": Altere para Yes. Nosso boto agora poder ser acessado pela combinao de teclas ALT+S; o Aba "Signals", sinal "clicked": Abra o combo Box e selecione on_btnSomar_clicked. O Glade compe um nome de funo padro com: prefixo "on_" + nome do widget + "_" + nome do sinal 7. Salve o formulrio com o nome de teste_glade.glade.

No fim desses passos, seu formulrio dever estar parecido com o da imagem abaixo:

figura 08: Layout do formulrio da calculadora Gravei um vdeo com a montagem desse formulrio. Se voc quiser pode visualiza-lo abaixo: [PG3]5.2. Utilizando os arquivos glade no PHP-GTK2 Utilizar o arquivo .glade gerado na nossa aplicao simples. O cdigo abaixo demonstra uma das maneiras de fazer isso:
<?php

// Aqui criamos (instanciamos) um objeto com base nas definies // do arquivo glade. A partir desse objeto, faremos referncia a todos os // objetos do formulrio $glade = new GladeXML(dirname(__FILE__) . '/teste_glade.glade');

// Estamos obtendo os objetos do formulrio ( campos texto, o boto somar e o // o formulrio em si ). $frmPrincipal = $glade->get_widget('frmPrincipal'); $btnSomar = $glade->get_widget('btnSomar'); $txtValor1 = $glade->get_widget('txtValor1'); $txtValor2 = $glade->get_widget('txtValor2'); $txtResultado = $glade->get_widget('txtResultado');

// Conecta o sinal clicked do boto a funo on_btnSomar_clicked $btnSomar>connect_simple('clicked','on_btnSomar_clicked',$txtValor1,$txtValor2,$txtResultado);

$frmPrincipal->connect_simple('destroy', array('gtk', 'main_quit'));

// O cdigo da funo executado toda vez que o boto

// do formulrio emitir o sinal clicked. Faremos a soma dos valores // digitados e imprimiremos no campo resultado function on_btnSomar_clicked($txtValor1,$txtValor2,$txtResultado) { $txtResultado->set_value( $txtValor1->get_value() + $txtValor2->get_value() ); }

Gtk::main(); ?>

Desconsiderando as linhas de comentrio e as tags do php, nosso programa tem apenas 13 linhas de cdigo. Se no utilizssemos o glade, com certeza ficaria bem maior. Alm disso daria muito mais trabalho ajustar o layout. Abaixo segue uma outra forma de fazer, s que utilizando orientao a objetos. a forma que adotei por padro para meus pequenos projetos. Fique a vontade para escolher a forma de programao que lhe deixe mais seguro.
<?php

class FormCalculadora {

// A funo conectada ao sinal clicked do boto de soma agora // acessa os atributos da classe (os objetos do formulrio) // ao invs de receb-los como parmetro function on_btnSomar_clicked() { $this->txtResultado->set_value( $this->txtValor1->get_value() + $this->txtValor2>get_value() ); }

// Instanciamos todos os objetos do formulrio que precisaremos utilizar no construtor // (sugesto apenas) function __construct() { $this->glade = new GladeXML(dirname(__FILE__) . '/teste_glade.glade'); $this->frmPrincipal = $this->glade->get_widget('frmPrincipal'); $this->btnSomar = $this->glade->get_widget('btnSomar');

$this->txtValor1 = $this->glade->get_widget('txtValor1'); $this->txtValor2 = $this->glade->get_widget('txtValor2'); $this->txtResultado = $this->glade->get_widget('txtResultado');

$this->frmPrincipal->connect_simple('destroy', array('gtk', 'main_quit'));

} }

// Instanciamos um objeto com base na classe acima $objCalculadora = new FormCalculadora();

// Aqui apresentamos uma nova forma de conectar sinais atraves da funo // signal_autoconnect_instance. Com ela, conectamos de uma s vez todos os // sinais que selecionamos no glade a suas respectivas funes dentro da classe $objCalculadora->glade->signal_autoconnect_instance($objCalculadora);

Gtk::main(); ?>

6. Trabalhando com tabelas de formulrio e banco de dados


Darei uma breve introduo sobre como inserir tabelas de formulrio em nosso formulrio e como carrega-las com dados a partir de um banco de dados. Uma tabela de formulrio de grande utilidade em um sistema. Ela apresenta uma lista de elementos separados por colunas que facilitam a navegao do usurio.No PHP-GTK2, essas tabelas so representadas pela classe GtkTreeView. Alm de permitir exibir dados de forma tabular (linhas x colunas) ela tambm permite que voc expanda os dados em forma de rvore. Vide um exemplo desses formulrios (imagem da aplicao de demos do Gtk2):

figura 09: GtkTreeView 6.1. Desenhando um formulrio que contenha uma tabela Vamos criar um formulrio e inserir uma tabela (GtkTreeView) nele. Vamos utilizar o Glade. Siga os passos abaixo:

Insira um Window e altere as propriedades abaixo: o Aba "General", propriedade "Name": Substitua por frmTesteTabela; o Aba "Common", propriedade "Visible": Altere para Yes; Insira um Fixed no formulrio; Insira um Scrolled Window no formulrio e ajuste para que ocupe boa parte do formulrio. Esse objeto permitir a exibio de barras de rolagem na nossa tabela; Adicione um TreeView dentro da Scrolled Window e altere a propriedade "Name" para "Tabela01" Salve o formulrio como teste_gtktreeview.glade

A sada deve ser parecida com a abaixo:

figura 10: Formulrio com a tabela 6.2. Carregando a tabela a partir de um banco de dados (sqlite3)

Aqui mostrarei como exibir dados na tabela definida acima lendo um banco de dados sqlite3.Faremos o acesso ao sqlite atravs de PDO (PHP Data Objects, uma espcie de ODBC nativo do PHP). Algumas extenses devem estar habilitadas no arquivo de configurao do PHP (vide item 3). Vamos criar uma pequena tabela de banco de dados e vamos carreg-la com algumas informaes. Para isso, vamos utilizar o cdigo abaixo:
<?php

// Fazemos conexo com o banco de dados. Caso o arquivo no exista, ele criado // automaticamente $dbSqlite = new PDO('sqlite:teste_banco.db');

// Verificamos se no houve nenhum problema na conexo if (!$dbSqlite) { echo("Erro ao abrir o base sqliten"); return false; }

// Vamos criar uma tabela no nosso banco (agenda) $dbSqlite->exec("create table agenda (nome varchar, telefone varchar)");

// Agora vamos carreg-la com alguns dados $dbSqlite->exec("insert into agenda values ('Toby Temple', '(11) 1111-2222')"); $dbSqlite->exec("insert into agenda values ('Mary Ashley', '(33) 44445555')"); $dbSqlite->exec("insert into agenda values ('Tracy Whitney', '(33) 66665555')"); $dbSqlite->exec("insert into agenda values ('Jill Castle', '(33) 6666-5555')"); $dbSqlite->exec("insert into agenda values ('Noelle Page', '(33) 6666-5555')"); ?>

Vamos agora escrever o cdigo para carregar nosso Tree View com dados. Definiremos 2 colunas para ela e listaremos os dados contidos na tabela agenda.
<?php class FormTesteTreeView {

function defineColunasTabela()

// Aqui definimos um model. o objeto atravs do qual exibiremos dados na // Nossa tabela $this->modelTabela = new GtkListStore(GObject::TYPE_STRING,GObject::TYPE_STRING); $this->Tabela01->set_model($this->modelTabela);

// Declaramos alguns renderers. Eles so necessrios para definir // as propriedades de nossas colunas (tipo de texto, largura da coluna, etc) $rend_nome = new GtkCellRendererText(); $rend_telefone = new GtkCellRendererText();

// Vamos definir a largura de nossas colunas $rend_nome->set_property('width', 300); $rend_telefone->set_property('width', 50);

// Declaramos as colunas e associamos // aos respectivos renderers $col_nome = new GtkTreeViewColumn('Nome', $rend_nome, 'text', 0); $col_telefone = new GtkTreeViewColumn('Telefone', $rend_telefone, 'text', 1);

// Por fim, adicionamos as colunas a tabela $this->Tabela01->append_column($col_nome); $this->Tabela01->append_column($col_telefone);

function carregaDadosTabela() {

// Conectamos ao banco criado previamente $dbSqlite = new PDO('sqlite:teste_banco.db');

// Definimos o comando que ser executado

$Sql = "select nome, telefone from agenda";

// Executamos o comando $results = $dbSqlite->query($Sql);

// Percorremos todas as linhas retornadas no select e atribuimos // varivel $row. Essa varivel um array indexado pelo nome // das colunas selecionadas no select while ($row = $results->fetch(PDO::FETCH_ASSOC)) { // Adicionamos a linha no model associado a tabela $this->modelTabela->append($row); }

function __construct() { $this->glade = new GladeXML(dirname(__FILE__) . '/teste_gtktreeview.glade'); $this->frmTesteTabela = $this->glade->get_widget('frmTesteTabela'); $this->Tabela01 = $this->glade->get_widget('Tabela01');

$this->frmTesteTabela->connect_simple('destroy', array('gtk', 'main_quit'));

// Aqui chamaremos o mtodo que ir definir que colunas nossa tabela possui e seus atributos $this->defineColunasTabela();

// O mtodo abaixo ir ler o sqlite e carregar os dados no nosso GtkTreeView $this->carregaDadosTabela();

} }

$objFormTesteTreeView = new FormTesteTreeView(); $objFormTesteTreeView->glade->signal_autoconnect_instance($objFormTesteTreeView);

Gtk::main(); ?>

Definimos as colunas que a nossa tabela dever conter na funo defineColunasTabela. Nela definimos um model para a tabela (objeto que usamos para comunicar com a tabela), alguns renderers (para definir os atributos das colunas) e associamos a nossa tabela. Na funo carregaDadosTabela executamos uma consulta na tabela agenda, e as linhas retornadas foram adicionadas ao model da tabela. O resultado visto na imagem abaixo:

figura 11: A sada do nosso exemplo

7. Consideraes finais e referncias


Espero que com esse tutorial voc tenha informaes bsicas para ir adiante por conta prpria.Talvez alguns pontos possam no ter ficado muito claros, mas com pesquisa a outras fontes e dedicao e voc pode ir alm. H alguns endereos que foram base para esse tutorial e que contm informaes e exemplos de aplicaes desenvolvidadas em PHP-GTK2. Site oficial do PHP-GTK ( http://gtk.php.net ): Contm tutoriais, exemplos e uma lista da biblioteca, descrevendo objetos e suas propriedades e mtodos; Site brasileiro do PHP-GTK ( http://www.php-gtk.com.br/ ): Contm manual do PHP-GTK, artigos, aplicativos para download e outros. Desenvolvi tambm uma pequena aplicao voltada a controle de vendas e estoque. Pode servir como fonte de estudos. Segue o endereo:http://sourceforge.net/projects/lwinstok/ Autor: Paulo Travaglia