Criando uma calculadora simples em PHP-GTK
Bom pessoal, abaixo segue o codigo da nossa calculadora. Usando os conceitos de GtkVBox e GtkHBox. Vejam como é simples:
Calculadora.php
O exemplo acima deverá ficar assim:
%IMAGEM_1%
Bom pessoal, espero que tenha ajudado alguém. Até a próxima. :)
Calculadora.php
<?php /* Calculadora simples. Desenvolvida por Thiago Ribeiro (offs@fatea.br) */ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') dl('php_gtk.dll'); else dl('php_gtk.so'); function destroy() { Gtk::main_quit(); echo "Saindo...\n"; } function del($button,$win) { global $space1; $win->hide(); $space1->set_text(""); } // Função que exibe mensagem de erro function newwindow($msg) { global $btn,$win; $win = &new GtkWindow(); $win->set_title("Erro"); $win->set_border_width(5); $win->set_policy(false,false,false); $win->set_position("GTK_WIN_POS_CENTER"); $win->connect('delete-event','delete_event'); $lbl = &new GtkLabel(" $msg "); $btn = &new GtkButton(" Ok "); $btn->set_border_width(5); $btn->set_usize(10,30); $btn->connect_after('clicked','del',$win); $vbox = &new GtkVBox(false,2); $vbox->pack_start($lbl,false,false); $vbox->pack_start($btn,false,false); $win->show_all(); return false; } // Função que realiza as operações function setvalue($button,$value) { global $ipt,$value1,$value2,$acao; if ($value == 'clear') { $value = $value1 = $value2 = $acao = $imprime = ""; } if ($value1 == NULL) { if ($value == ',') { $value1 = "0,"; } else { $value1 = $value; } $value=""; $imprime = $value1; } if ($value1 && $value!='soma' && $value!='tira' && $value != 'divi' && $value != 'mult' && $acao == NULL && $value2 == NULL && $value != 'fim') { if ($value==',') { if (!substr_count($value1,",")) { $value1 = $value1.","; $imprime = $value1; $value = ""; } else { $imprime = $value1; $value = ""; } } else { $value1 = $value1.$value; $value = ""; $imprime = $value1; } } if ($value2 && $value != 'soma' && $value != 'tira' && $value!='divi' && $value!='mult' && $acao && $value!='fim') { $win->add($vbox); if ($value == ',') { if (!substr_count($value2,",")) { $value2 = $value2.","; $imprime = $value2; $value = ""; } else { $imprime = $value2; $value = ""; } } else { $value2 = $value2.$value; $imprime = $value2; $value = ""; } } if ($value == 'soma' && $value1) { $value = ""; $imprime = $value1; $acao = "soma"; } elseif ($value == 'tira' && $value1) { $value = ""; $imprime = $value1; $acao = "tira"; } elseif ($value == 'mult' && $value1) { $value = ""; $imprime = $value1; $acao = "mult"; } elseif ($value == 'divi' && $value1) { $value = ""; $imprime = $value1; $acao = "divi"; } if ($value2 == NULL && $value != 'fim' && $value != 'tira' && $value != 'soma' && $value != 'mult' && $value!='divi' && $acao) { $value2 = $value; $imprime = $value2; $value = ""; } if ($value == 'fim' && $acao == 'soma') { $imprime = $value1 + $value2; $value1 = $imprime; $value2 = $acao = $value = ""; } elseif ($value == 'fim' && $acao == 'tira') { $imprime = $value1 - $value2; $value1 = $imprime; $value2 = $acao = $value = ""; } elseif ($value == 'fim' && $acao == 'mult') { $imprime = $value1 * $value2; $value1 = $imprime; $value2 = $acao = $value = ""; } elseif ($value == 'fim' && $acao == 'divi') { if ($value2 == 0) { newwindow("Divisão por zero!"); $value = $value1 = $value2 = $acao = $imprime = ""; } else { $imprime = $value1 / $value2; $value1 = $imprime; $value2 = $acao = $value = ""; } } $ipt->set_text($imprime); $imprime = ""; } function delete_event() { return false; } function clear() { global $ipt; $ipt->set_text(""); } // Cria uma janela $window = &new GtkWindow(); // Atribui um titulo $window->set_title("Calculadora"); // Atribui uma borda $window->set_border_width(5); // Atribui o parametro para nao ser redimensionada $window->set_policy(false,false,false); // Atribui a posição de abertura ao centro $window->set_position("GTK_WIN_POS_CENTER"); // Conecta-a na função de saida $window->connect('destroy','destroy'); $window->connect('delete-event','delete_event'); // Cria uma caixa vertical com 4 linhas $vbox = &new GtkVBox(false,4); // Cria uma caixa horizontal com 2 linhas $hbox = &new GtkHBox(false,2); // Cria duas caixas verticais com 4 e 5 linhas $vbox1 = &new GtkVBox(false,4); $vbox2 = &new GtkVBox(false,5); // Cria 5 caixas horizontas com 3,3,3,3 e 1 coluna $hbox1 = &new GtkHBox(false,3); $hbox2 = &new GtkHBox(false,3); $hbox3 = &new GtkHBox(false,3); $hbox4 = &new GtkHBox(false,3); $hbox5 = &new GtkHBox(false,1); // Cria um label e lhe atribui texto vazio,alinhamento e tamanho $lbl0 = &new GtkLabel(); $lbl0->set_text(" "); $lbl0->set_alignment(0,0); $lbl0->set_usize(10,1); // Cria um label e lhe atribui um tamanho $space = &new GtkLabel(" "); $space->set_usize(10,1); $space1 = &new GtkLabel(); $space1->set_text(" "); // Cria uma nova caixa de entrada com maxlength,tamanho,posicao e parametro de edição // desabilitado. $ipt = &new GtkEntry(); $ipt->set_max_length(60); $ipt->set_usize(170,23); $ipt->set_position(1); $ipt->set_editable(false); // Cria os botões e lhes atribui suas conexões $btni = &new GtkButton(" = "); $btni->set_border_width(2); $btni->connect('clicked','setvalue','fim'); $btnp = &new GtkButton(" . "); $btnp->set_border_width(2); $btnp->set_usize(30,1); $btnp->connect('clicked','setvalue',','); $btn0 = &new GtkButton(" 0 "); $btn0->set_border_width(2); $btn0->connect('clicked','setvalue','0'); $btn1 = &new GtkButton(" 1 "); $btn1->set_border_width(2); $btn1->connect('clicked','setvalue',1); $btn2 = &new GtkButton(" 2 "); $btn2->set_border_width(2); $btn2->connect('clicked','setvalue',2); $btn3 = &new GtkButton(" 3 "); $btn3->set_border_width(2); $btn3->connect('clicked','setvalue',3); $btn4 = &new GtkButton(" 4 "); $btn4->set_border_width(2); $btn4->connect('clicked','setvalue',4); $btn5 = &new GtkButton(" 5 "); $btn5->set_border_width(2); $btn5->connect('clicked','setvalue',5); $btn6 = &new GtkButton(" 6 "); $btn6->set_border_width(2); $btn6->connect('clicked','setvalue',6); $btn7 = &new GtkButton(" 7 "); $btn7->set_border_width(2); $btn7->connect('clicked','setvalue',7); $btn8 = &new GtkButton(" 8 "); $btn8->set_border_width(2); $btn8->connect('clicked','setvalue',8); $btn9 = &new GtkButton(" 9 "); $btn9->set_border_width(2); $btn9->connect('clicked','setvalue',9); $btnclear = &new GtkButton(" limpa "); $btnclear->set_border_width(2); $btnclear->connect('clicked','setvalue','clear'); $btnsoma = &new GtkButton(" + "); $btnsoma->set_border_width(2); $btnsoma->connect('clicked','setvalue','soma'); $btntira = &new GtkButton(" - "); $btntira->set_border_width(2); $btntira->connect('clicked','setvalue','tira'); $btnmult = &new GtkButton(" * "); $btnmult->set_border_width(2); $btnmult->connect('clicked','setvalue','mult'); $btndivi = &new GtkButton(" / "); $btndivi->set_border_width(2); $btndivi->connect('clicked','setvalue','divi'); // Inicia o processo de adição das caixas $vbox->pack_start($lbl0,false,false); $vbox->pack_start($ipt,false,false); $vbox->pack_start($space,false,false); $vbox->pack_start($hbox,false,false); $hbox1->pack_start($btn9,false,false); $hbox1->pack_start($btn8,false,false); $hbox1->pack_start($btn7,false,false); $hbox2->pack_start($btn6,false,false); $hbox2->pack_start($btn5,false,false); $hbox2->pack_start($btn4,false,false); $hbox3->pack_start($btn1,false,false); $hbox3->pack_start($btn2,false,false); $hbox3->pack_start($btn3,false,false); $hbox4->pack_start($btn0,false,false); $hbox4->pack_start($btnp,false,false); $hbox4->pack_start($btni,false,false); $hbox5->pack_start($btnclear,false,false); $hbox5->pack_start($vbox2,false,false); $vbox2->pack_start($btnsoma,false,false); $vbox2->pack_start($btntira,false,false); $vbox2->pack_start($btnmult,false,false); $vbox2->pack_start($btndivi,false,false); $vbox1->pack_start($hbox1,false,false); $vbox1->pack_start($hbox2,false,false); $vbox1->pack_start($hbox3,false,false); $vbox1->pack_start($hbox4,false,false); $hbox->pack_start($vbox1,false,false); $hbox->pack_start($hbox5,false,false); $window->add($vbox); $window->show_all(); Gtk::main(); ?>
O exemplo acima deverá ficar assim:
%IMAGEM_1%
Bom pessoal, espero que tenha ajudado alguém. Até a próxima. :)
muito legal O PHP-GTK....
16/03/2004 6:18pm
(~20 anos atrás)
Coloquei um artigo agora pra revisao
e vou colocar outro ainda.. só isso já ficarão uns 6 em espera.. não sei qual coloco primeiro ..
de qualquer forma preciso primeiro fazer um mini-sistema em GTK pra depois explicar como e o que fazer..
alguma idéia fora a locadora ?
e vou colocar outro ainda.. só isso já ficarão uns 6 em espera.. não sei qual coloco primeiro ..
de qualquer forma preciso primeiro fazer um mini-sistema em GTK pra depois explicar como e o que fazer..
alguma idéia fora a locadora ?
09/12/2003 5:49am
(~21 anos atrás)
Marcelo, porque não seguir a idéia do Thiago e evoluir no projeto. Exlicar a base orientada a projeto. Uma locadora por exemplo...
08/12/2003 5:24pm
(~21 anos atrás)
bom, eu particularmente ia começar um artigo ensinando step-by-step mas ai vi um artigo do Luiz Cardoso se eu não me engano
perdão se errei o nome..
ele explicou muito bem como desenhar a primeira tela e tudo mais.. eu achei interessante..
A única crítica(construtiva) é que poderia ser mais didático e menos teórico.. não adianta falar widget se o cara não entender primeiro o que é um widget
dai pra explicar container o cara ja fala:
é um conjunto de widgets.. mas poxa.. eu não entendi nem o que é widget, logo, o cara passa a não entender o container e assim vai!
perdão se errei o nome..
ele explicou muito bem como desenhar a primeira tela e tudo mais.. eu achei interessante..
A única crítica(construtiva) é que poderia ser mais didático e menos teórico.. não adianta falar widget se o cara não entender primeiro o que é um widget
dai pra explicar container o cara ja fala:
é um conjunto de widgets.. mas poxa.. eu não entendi nem o que é widget, logo, o cara passa a não entender o container e assim vai!
08/12/2003 8:44am
(~21 anos atrás)
a grande dificuldade para aprender php-gtk é também a grande falta de doc... postei este artigo para tentar dar uma clareada pro pessoal. o código de lógica ta meio zuado.. poderia ser feito com case sei la... mais a intenção foi mostrar como desenhar as telas, etc.. é uma coisa que a maioria tem dificuldade..um projeto de php-gtk seria uma coisa bem legal.. acho que as coisas deveriam começar bem por baixo... por exemplo.. alternativas livres para programas de bibliotecas, video locadoras, comercios, etc.. ia ser bem legal algo assim...
08/12/2003 6:34am
(~21 anos atrás)
Bom, vamos lá..
pensei no nome:
"PHP-GTK mini-curso"
bom, vou começar a preparar o conteúdo e quando estiver pronto eu aviso!
Abraços!
pensei no nome:
"PHP-GTK mini-curso"
bom, vou começar a preparar o conteúdo e quando estiver pronto eu aviso!
Abraços!
06/12/2003 9:17am
(~21 anos atrás)
Ótima idéia, uma espécie de aula coletiva, onde todos vão contribuir, tanto nos artigos, nas FAQ's e nos scripts. Além do consagrado fórum...
06/12/2003 8:12am
(~21 anos atrás)
Pessoal.. eu quero idéias para os meus próximos artigos e Diogo, esta com certeza será uma delas.. também tenho recebido críticas construtivas do André por exemplo sobre os meus artigos e vou fazer de tudo pra melhorar..
então lá vai..
O que vocês (todo mundo) acham de tutoriais ensinando não toda a teoria da GTK, mas sim, simples telinhas com um botãozinho por exemplo, dai num segundo artigo, uma telinha com um botão e um campo text.. na terceira um pequeno form.. na quarta uma conexao ao banco.. na quinta.. um programinha de envio de email via GTK e por ai vai..
Não que eu saiba fazer tudo isso ok ? mas irei aprendendo com vocês. só que teria que ser um mini-curso de PHP-GTK e como eu tenho muito interesse em dar aulas (lecionar e tudo mais) serviria como preparativo..
O que o pessoal acha da idéia ?
então lá vai..
O que vocês (todo mundo) acham de tutoriais ensinando não toda a teoria da GTK, mas sim, simples telinhas com um botãozinho por exemplo, dai num segundo artigo, uma telinha com um botão e um campo text.. na terceira um pequeno form.. na quarta uma conexao ao banco.. na quinta.. um programinha de envio de email via GTK e por ai vai..
Não que eu saiba fazer tudo isso ok ? mas irei aprendendo com vocês. só que teria que ser um mini-curso de PHP-GTK e como eu tenho muito interesse em dar aulas (lecionar e tudo mais) serviria como preparativo..
O que o pessoal acha da idéia ?
06/12/2003 7:23am
(~21 anos atrás)
A falta no PHP-GTK bons professores, que se interessem e possam passar de uma forma mais simples, o GTK acaba se tornando distante pra quem não se ambienta com OO e como isso acaba se tornando uma barreira, a área fica com pouquíssimos especialistas... Dei uma olhada no código fonte do artigo e do Agata e não parece difícil, só que falta mais material básico e introdutório, para que não seja necessário essa análise de código pra quem está aprendendo. O PHPBrasil pode servir pra isso, publicando mais artigos sobre o assunto.
O PHP-GTK surpreende todo mundo, pois quando está apenas no browser quem não conhece a linguagem apenas fala que é a mesma coisa que o ASP ou ColdFusion ou outras... Mas quando se apresenta o PHP-GTK, qualquer um passa a ver o PHP de outra forma, como é na realidade, uma linguagem que cada vez mais vem evoluindo.
O PHP-GTK surpreende todo mundo, pois quando está apenas no browser quem não conhece a linguagem apenas fala que é a mesma coisa que o ASP ou ColdFusion ou outras... Mas quando se apresenta o PHP-GTK, qualquer um passa a ver o PHP de outra forma, como é na realidade, uma linguagem que cada vez mais vem evoluindo.
06/12/2003 6:38am
(~21 anos atrás)
Diogo,
Eu particularmente também sou um entusiasta (só de nome) do GTK.. gosto pra caramba.. apesar de não trabalhar muito com ele.. o que falta pro nosso amigo é explicação
eu pensei até numa classe para facilitar o uso .. nao sei se seria legal abstrair isso numa classe e disponibilizar..
e sobre o artigo eu achei legal pra caramba a iniciativa..
só que eu queria ver formas organizadas de trabalhar-se com a gtk.. algo como um pequeno-grande sisteminha rodando.. que fosse usando varios modulos separando em arquivos etc..
Eu particularmente também sou um entusiasta (só de nome) do GTK.. gosto pra caramba.. apesar de não trabalhar muito com ele.. o que falta pro nosso amigo é explicação
eu pensei até numa classe para facilitar o uso .. nao sei se seria legal abstrair isso numa classe e disponibilizar..
e sobre o artigo eu achei legal pra caramba a iniciativa..
só que eu queria ver formas organizadas de trabalhar-se com a gtk.. algo como um pequeno-grande sisteminha rodando.. que fosse usando varios modulos separando em arquivos etc..
05/12/2003 8:25pm
(~21 anos atrás)