Ok… existe um jeito de construir uma janela e atribuir os sinais aos widgets sem escrever muito código usando o Glade. O exemplo abaixo é bem simples: Apenas uma janelinha com um label e um button:
Para fazer isso vamos ao Glade criar uma GtkWindow e, dentro dela, colocar uma GtkBox com orientação vertical (o padrão) e duas divisões:
Note que mudei o nome do objeto da janela para window, ao invés do default window1. Modifiquei também a propriedade title na aba “General” para “Hello”. O motivo de colocarmos a GtkBox acima é que queremos colocar uma janela filha embaixo da outra. Daí, colocamos elas na GtkBox e temos algo assim:
Depois de modificadas as características visuais de cada objeto vou às abas “Signals” tanto da window quanto de button1 e colocarei o nome da função gtk_main_quit nos eventos destroy e clicked:
Tudo o que temos que fazer agora é salvar o projeto no formato GtkBuilder e fazer um programinha para carregá-lo:
#include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *window; gtk_init(&argc, &argv); builder = gtk_builder_new(); // "App.glade" é o arquivo que salvamos antes! // Existem outros lugares de onde podemos obter o XML! gtk_builder_add_from_file(builder, "App.glade", NULL); // Conecta os eventos assinalados no XML com as // respectivas funções. gtk_builder_connect_signals(builder, NULL); // Pega o objeto window e mostra-o. window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); gtk_widget_show_all(window); gtk_main(); return 0; }
Voilà! Basta compilar e executar:
$ gcc -O3 -s -o hello hello.c \ `pkg-config --cflags --libs gtk+-3.0`
Repare que isso ai exige o GTK+3.x.
UPDATE:
Duas pequenas modificações sem muita importância… É conveniente que o evento “clicked” do botão requisite que a janela seja fechada. Isso pode ser feito modificando o evento para chamar gtk_window_close com o parâmetro window (aparecerá uma lista com os objetos contidos na janela ao clicar em “User Data”).
A outra modificação é quanto às própria janela window, o label label1 e o botão button1. Em window, habilite os tamanhos default e ajuste-os em 320×200 (por exemplo). No label1, na aba “Packing”, habilite “Expand”. E em button1, mude o “Button Content” para “Stock Button” e selecione “gtk-close” na combobox. A diferença na janela final será essa:
No caso do botão, se seu sistema estiver em português, aparecerá “Fechar” e se os botões com ícones estiverem habilitados, aparecerá um x vermelho, ao lado… :)
Você precisa fazer login para comentar.