Criando uma calculadora com o Glade

ice

Neste artigo vou mostrar como se cria uma calculadora com o Glade e o GTK+. Para quem não sabe, Glade é um RAD (Rapid Application Development) que nos permite criar interfaces em GTK+ de forma bem simples, a base de cliques.

[ Hits: 113.226 ]

Por: Iuri Cernov em 15/03/2005


Criando as funções do programa



Estamos prontos então para fazer o código-fonte do nosso programa. Abra o arquivo callbacks.c com seu editor preferido (eu uso o Emacs) e adicione as seguintes linhas:

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <gtk/gtk.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"



void on_btDiv_clicked (GtkButton *button, gpointer user_data)
{
     GtkWidget
  *calc, // A janela
  *prim, // O campo "enPrimeiro"
  *seg;  // e o campo "enSegundo"
     int n1, n2; // n1 e n2: primeiro e segundo numero
     char n3[30]; // resultado em formato string
     calc = gtk_widget_get_toplevel(GTK_WIDGET(button));
     prim = lookup_widget(calc, "enPrimeiro");
     seg = lookup_widget(calc, "enSegundo");
     n1 = atoi(gtk_entry_get_text(GTK_ENTRY(prim)));
     n2 = atoi(gtk_entry_get_text(GTK_ENTRY(seg)));
     if (n2 == 0) return; // Não dividir por 0...
     sprintf(n3, "%d", n1 / n2); /* Essa é a única parte que vai *
  * mudar nas outras funções     */

     gtk_entry_set_text(GTK_ENTRY(prim), n3);
     gtk_entry_set_text(GTK_ENTRY(seg), "");
}


void on_btVezes_clicked (GtkButton *button, gpointer user_data)
{
     GtkWidget
  *calc,
  *prim,
  *seg;
     int n1, n2;
     char n3[30];
     calc = gtk_widget_get_toplevel(GTK_WIDGET(button));
     prim = lookup_widget(calc, "enPrimeiro");
     seg = lookup_widget(calc, "enSegundo");
     n1 = atoi(gtk_entry_get_text(GTK_ENTRY(prim)));
     n2 = atoi(gtk_entry_get_text(GTK_ENTRY(seg)));
     sprintf(n3, "%d", n1 * n2);
     gtk_entry_set_text(GTK_ENTRY(prim), n3);
     gtk_entry_set_text(GTK_ENTRY(seg), "");
}


void on_btMenos_clicked (GtkButton *button, gpointer user_data)
{
     GtkWidget
  *calc,
  *prim,
  *seg;
     int n1, n2;
     char n3[30];
     calc = gtk_widget_get_toplevel(GTK_WIDGET(button));
     prim = lookup_widget(calc, "enPrimeiro");
     seg = lookup_widget(calc, "enSegundo");
     n1 = atoi(gtk_entry_get_text(GTK_ENTRY(prim)));
     n2 = atoi(gtk_entry_get_text(GTK_ENTRY(seg)));
     sprintf(n3, "%d", n1 - n2);
     gtk_entry_set_text(GTK_ENTRY(prim), n3);
     gtk_entry_set_text(GTK_ENTRY(seg), "");
}


void on_btMais_clicked (GtkButton *button, gpointer user_data)
{
     GtkWidget
  *calc,
  *prim,
  *seg;
     int n1, n2;
     char n3[30];
     calc = gtk_widget_get_toplevel(GTK_WIDGET(button));
     prim = lookup_widget(calc, "enPrimeiro");
     seg = lookup_widget(calc, "enSegundo");
     n1 = atoi(gtk_entry_get_text(GTK_ENTRY(prim)));
     n2 = atoi(gtk_entry_get_text(GTK_ENTRY(seg)));
     sprintf(n3, "%d", n1 + n2);
     gtk_entry_set_text(GTK_ENTRY(prim), n3);
     gtk_entry_set_text(GTK_ENTRY(seg), "");
}

Demorou mas terminamos. Salve o arquivo e feche seu editor.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criando a interface do nosso programa
   3. Analisando o código-fonte
   4. Criando as funções do programa
   5. Compilando e rodando o programa
   6. Conclusão
Outros artigos deste autor

Incrementando seus scripts com dialog

Operadores de redirecionamento

Leitura recomendada

Introdução a GTK+ em C

Introdução à linguagem C - Parte III

Inteiros e Strings na linguagem C

Bibliotecas estáticas c/c++

Operadores com a linguagem C

  
Comentários
[1] Comentário enviado por ice em 17/03/2005 - 16:53h

E aí pessoal cadê os comentários??

[2] Comentário enviado por padovani em 17/03/2005 - 17:31h

Parabéns pelo artigo! Eu estava mesmo procurando um RAD para começar a programar em GTK+ e gostei muito do Glade. Aproveitando a oportunidade, gostaria de saber se há como trabalhar com shell-script no Glade, ou seja, chamar algum script a partir do programa.

[3] Comentário enviado por ice em 18/03/2005 - 15:24h

Eu acho que não, mas dá pra usar com o Python. Eu não sei como, mas dá...

[4] Comentário enviado por ramonklown em 19/03/2005 - 15:03h

é só você chamar o comando do shell-script, não dá para chamar um programa em shel inteiro pois um programa shell não utiliza interface gráfica. Mas pode fazer links para executar comando por comando.

[5] Comentário enviado por lilolouco em 26/10/2005 - 10:31h

eu tentei compilar o programa porem quando eu digitei os comandos deu a seguinte mensagem
"usr/bin/ld: cannot find -lfontconfig"
e nao compilou, porem como o glade gera um autoexec eu rodei e quando o glade gerou o makefile na pasta src eu deletei as linhas do tal -fontconfig e funcionou...soh nao sei se isso eh seguro fazer...se nao for o que devo fazer?

[6] Comentário enviado por assismvla em 26/11/2005 - 18:18h

Como eu faria por exemplo : tenho uma primeira tela por exemplo de login, com dois campos login, senha e um botão "enviar".Onde(em qual arquivo callback.c , main.c ??) ficaria o codigo da conexão com o banco e depois como faia para chamar uma segunda tela(uma segunta interface) com o programa em sí !!

Valeu !!

[7] Comentário enviado por ustrucx em 28/11/2005 - 23:28h

Achei bem esclarecedor o artigo, a parte do codigo alí em gtk pra mim é um mistério :p mas o artigo é sobre glade e me esclareceu bastante a parte de criar os botoes e os atributos tal.
Estou agora na captura de como escrever em python no glade ;)
[]'s

[8] Comentário enviado por FelipeAbella em 30/06/2006 - 13:02h

Já foi um bom começo para eu começar a programar em GTK+, agora eu vou baixar mais tutoriais. Nota 10.

[9] Comentário enviado por phpandromeda em 02/12/2006 - 10:48h

Uso Slackware ....instalei o glade 3 .... mas naum consigo compilar nem um simples exemplo .....
#include <gtk/gtk.h>
#include <glade/glade.h>


int main (int argc, char *argv[])
{
GladeXML *ui;
gtk_init(&argc, &argv);

/* Read user interface description from glade file */
ui = glade_xml_new ("oi.glade", "main_window", NULL);
/* Automatically connect signals */
glade_xml_signal_autoconnect(ui);
gtk_main();

return 0;
}


ele da a seguintes mensagens de erro

gcc $(pkg-config --libs --cflags gtk+-2.0) stage1.c
stage1.c:2:25: glade/glade.h: No such file or directory
stage1.c: In function `main':
stage1.c:7: error: `GladeXML' undeclared (first use in this function)
stage1.c:7: error: (Each undeclared identifier is reported only once
stage1.c:7: error: for each function it appears in.)
stage1.c:7: error: `ui' undeclared (first use in this function)


[10] Comentário enviado por bozux em 06/03/2007 - 19:25h

Cara,

muito bom o artigo, explicando passo-a-passo e bem didático. Deu pra ter uma noção legal de como a coisa funciona... tá certo q é bem simples mas atendeu o objetivo!

parabéns e obrigado!!!

Fábio

[11] Comentário enviado por hiroyuki em 12/09/2007 - 11:32h

muito bom! arquivo está servindo de ponta-pé inicial para o estudo do glade =)

[12] Comentário enviado por shirglei em 04/10/2007 - 15:52h

Amo o linux, uso ele, sempre.... mas sinceramente programar em linux é desanimador se comparado a outras IDEs como O borland C+= Builder, Delphi ou ate mesmo o Visual Studio da MICOsoft, é so por isso que ainda tenho o Ruindows instalando na minha maqui (so uso ele pra programar e nada mais )

[13] Comentário enviado por r.denilson em 13/12/2007 - 23:27h

Olá galera, achei fantástico a idéia desta calculadora só que até agora não estou conseguindo compilar. Estou recebendo o seguinte erro:

Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found

Eu utilizo o Ubuntu. Instalei alguns pacotes do GTK, mas não consigo achar o bendito "gtk +-2.0".

Alguém pode me ajudar...

[14] Comentário enviado por wswillianss em 19/12/2008 - 03:52h

Parabéns, gostei muito desse artigo. Estava procurando justamente isso aqui, na net e não achei, mas quando resolvi entrar no bom e velho Viva o Linux conseguir através do seu artigo. Excelente!!! Parabéns mesmo. Olha eu gostaria de saber como faço para, utilizar uma janela secundária neste artigo? É possível? Abração!

[15] Comentário enviado por Rob_Som em 27/04/2009 - 12:34h

Parabéns Pelo Artigo!
Me cadastrei no Viva o Linux para te dar o parabéns e para ajudar o próximo igual você fez.
Se não fosse o seu ótimo tutorial eu não iria conseguir finalizar o meu trabalho.
Fiz em C também, foi locura, mas eu fiz.

Obrigado amigo, abraços.

[16] Comentário enviado por xinobio em 26/06/2009 - 01:29h

cara, gostei mto desse tuto! n conhecia o glade, ele eh mto podereso mesmo!

mas, acho q fiz algo errado, quando digito os dois numeros e alguma operação da erro e sai ! Mas deve ter sido bronca minha mesmo...
obrigado mesmo ai velho!

[17] Comentário enviado por lucas_daltro em 30/06/2010 - 21:24h

Muito legal cara,tem pouca documentação GTK em português valeu!

[18] Comentário enviado por evamberto em 03/04/2011 - 21:18h

legal....................................................

[19] Comentário enviado por wladimir58 em 20/06/2016 - 15:45h

Infelizmente, pelo menos para mim, o Glade dá problemas de incompatibilidade; já tentei usar vários exemplos de programas com ele e python, mas simplesmente não funciona.

A versão que eu tinha do glade era 3.x e geralmente a maioria dos escipts pedem a versão 2.0

Desisti do Glade e agora to usando o QT Interface Designer, é muito melhor.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts