Criando Uma Calculadora Com o Glade

  • Published on
    23-Jun-2015

  • View
    233

  • Download
    0

Transcript

Criando uma calculadora com o GladeAutor: Iuri Cernov Data: 15/03/2005 Introduo Neste artigo vou mostrar como se faz uma calculadora com o Glade. Ser uma calculadora simples, mas poder dar uma introduo quem quer programar em GTK+. Os programas necessrios so:

Glade 2.0 GTK+ 2.0 gcc 3.3.3 (no testei com outras verses)

Apresentando o GladeO Glade um programa usado para criar interfaces grficas para os programas feitos em GTK+. Ele funciona da seguinte forma: primeiro se cria a interface do programa, depois gera o cdigo e ento termina programando as aes dos botes, etc. Geralmente nas distribuies mais completas, o Glade j vem junto, mas caso no venha, voc pode baixar em http://www.glade.org. A aparncia dele assim:

Tente criar algumas interfaces com ele e quando estiver bem familiarizado passe para a prxima pgina... Criando a interface do nosso programa Nossa calculadora ser bem simples e funcionar da seguinte forma: coloca-se um nmero no primeiro campo, outro nmero no segundo campo e depois escolhe a operao que quer fazer (somar, multiplicar etc). O resultado aparecer no primeiro campo e o segundo campo ficar vazio. Ok, ento vamos comear! Primeiro crie um projeto novo:

Clique em "Novo"; Escolha "Novo projeto GTK+".

Depois crie uma janela: Clique em "Janela" na paleta.

Na janela "Propriedades", coloque:

Nome: calculadora (em minsculo mesmo); ttulo: Calculadora - Por (Seu nome aqui!);

Na aba "Comum" da janela "Propriedades", coloque:

Largura: 250 Altura: 255

Na aba "Sinais" da janela "Propriedades", coloque:

Sinal: destroy Manipulador: gtk_main_quit

Clique em "Adicionar". Essa ltima ao pra quando clicar no "Xizinho" da janela ela fechar. Agora clique em "Posies fixas" da Paleta (a que tem um quadrado grande com trs quadradinhos espalhados) e clique na janela depois. No ser preciso mudar nada nas propriedades. Salve o projeto em ~/calculadora. Crie ento a seguinte interface o mais parecido possvel:

E ento mude as propriedades de cada um: ATENO: Respeite as maisculas e minsculas!!!-- entry1 - Widget - Nome: enPrimeiro - Comum - Largura: 112 - Altura: 24 - Dica de ferramenta: Digita um nmero a -- entry2 - Widget - Nome: enSegundo - Comum - Largura: 112

- Altura: 24 - Dica de ferramenta: Digita outro a -- button1 - Widget - Nome: btMais - Etiqueta: _Somar - Comum - Largura: 128 - Altura: 26 - Sinais - Clique em "..." - Escolha "clicked" - Clique em "Adicionar" -- button2 - Widget - Nome: btMenos - Etiqueta: S_ubtrair - Comum (mesmo de button1) - Sinais (mesmo de button1) -- button3 - Widget - Nome: btVezes - Etiqueta: _Multiplicar - Comum (mesmo de button1) - Sinais (mesmo de button1) -- button4 - Widget - Nome: btDiv - Etiqueta: _Dividir - Comum (mesmo de button1) - Sinais (mesmo de button1) -- button5 - Widget - Nome: btSair - Etiqueta: Sai_r - Icone: Sair - Comum (mesmo de button1) - Sinais - Digite "clicked" em Sinal - Em Manipulador digite "gtk_main_quit" - Clique em "Adicionar"

Ok, finalmente terminamos! Vamos agora criar o cdigo fonte:

Salve o projeto; Clique em "Construir" na janela "Glade: calculadora"; Aparecer na barra de status: "cdigo fonte gravado".

Vamos agora para a prxima parte...

Analisando o cdigo-fonte Agora a interface do nosso programa est criada. Vamos ver na pasta ~/calculadora. Existe um monte de arquivos e dois diretrios, po/ e src/. Entre ento no diretrio "src" e ver 8 arquivos:

interface.c interface.h callbacks.c callbacks.h main.c Makefile.am support.c support.h

O arquivo Makefile.am no ser necessrio nesse projeto. Pode apagar ele se quiser. Os arquivos interface.[ch] so para definir a interface do programa. Os arquivos callbacks.[ch] so as funes dos botes. Muito importante! O arquivo main.c a entrada do programa, ou seja, aonde o programa vai comear. Os arquivos support.[ch] define algumas coisas do Glade. No mexa! Abra o arquivo main.c e procure uma linha igual esta (em torno da 29): add_pixmap_directory(PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); Ento comente ela. Para comentar basta colocar um "//" no comeo dela: // add_pixmap_directory(PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");

Agora vamos colocar o cdigo-fonte do nosso programa. Criando as funes do programa Estamos prontos ento para fazer o cdigo-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 #endif

#include #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; // No dividir por 0... sprintf(n3, "%d", n1 / n2); /* Essa a nica parte que vai * * mudar nas outras funes */ 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.

Compilando e rodando o programa Bom, temos o cdigo fonte, s falta o programa em si. Para compilar o programa digite: $ gcc $(pkg-config --libs --cflags gtk+-2.0) callbacks.c interface.c support.c main.c O $(pkg-config --libs --cflags gtk+-2.0) tem o mesmo efeito de `pkg-config --libs --cflags gtk+2.0` para quem no sabe. Ento teremos um arquivo novo chamado a.out. o seu programa! Vamos ver ele rodando ento: $ ./a.out

Concluso Pareceu difcil? Realmente no muito fcil no, mas com um pouco de prtica montar um programa com o Glade vai se tornando fcil e legal. Para programar em GTK voc pode baixar as documentaes e os tutoriais em http://www.gtk.org.