Você está na página 1de 19

Desenvolvendo GUI com GTK+

História

 GIMP (GNU Image Manipulator Program)


criado em 1995.
 GTK (GIMP Toolkit) foi lançado em 1998
 Criado para substituir o Motif
 GTK+ 2 foi lançado em 2002
 Multithread
 Novos componentes
 Incompatível com GTK 1
Casos de sucesso

 GIMP
Casos de sucesso

 GNOME
Casos de sucesso

 MAEMO
Casos de sucesso

 Firefox
Características do GTK+

 Multiplataforma
 Multithread
 Orientado a eventos
 Orientado a objeto
 Escrito em C
 Bem documentado
Multiplataforma

 GDK (GIMP Drawing Kit) e Cairo para


desenhos básicos
 Pango para renderizar e formatar textos
 GLib para o baixo nível
 Multithread
Look and feel
Conceitos básicos

 Widget (window gadget)


 Componente básico de uma GUI
 Segue conceito da POO
 Sinais
 Eventos disparados por widgets
 Interação homem-máquina
 Callback
 Funções chamadas para tratar os sinais
 Laço principal do GTK+ espera o retorno da função
Binds
Hello World pyGTK
#!/usr/bin/env python
#coding: utf-8

#Importa o GTK+ 2
import pygtk
pygtk.require('2.0')
import gtk

#Cria o callback chamado no evento "clicked" do botão.


def onClick(self, widget, data=None):
print "Hello World"

#Cria o botão com label


button = gtk.Button("Hello World")

#Altera o tamanho do botão


button.set_size_request(200, 70)

#Conecta o sinal "clicked" do botão ao callback "onClick"


button.connect("clicked", onClick, None)

#Cria a janela
window = gtk.Window(gtk.WINDOW_TOPLEVEL)

#Seta o título
window.set_title("Tchelinux");

#Conecta o sinal de destruir ao método de encerrar o GTK+


window.connect("destroy", gtk.main_quit)

#Adiciona o botão a janela


window.add(button)

#Mostra a janela com o botão


window.show_all()

#Inicia o GTK+
gtk.main()
Hello World PHP-GTK
<?
#Cria o callback chamado no evento "clicked" do botão.
function onClick()
{
echo "Hello World\n";
}

#Cria o botão com label


$botao = new GtkButton('Hello World');

#Altera o tamanho do botão


$botao->set_size_request(200, 70);

#Conecta o sinal "clicked" do botão ao callback "hello"


$botao->connect('clicked', 'onClick');

#Cria a janela
$janela = new GtkWindow();

#Seta o título
$janela->set_title('Tchelinux');

#Conecta o sinal de destruir ao método de encerrar o GTK+


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

#Adiciona o botão a janela


$janela->add($botao);

#Mostra a janela com o botão


$janela->show_all();

#Inicia o GTK+
Gtk::main();
?>
Hello World C-GTK
//Inclui o GTK+ 2
#include <gtk-2.0/gtk/gtk.h>

//Cria o callback chamado no evento "clicked" do botão.


void onClick(GtkWidget *w, gpointer p)
{
g_print("Hello world\n");
}

void main(int argc, char **argv) //default main function


{
//Cria os widgets
GtkWidget *window, *button;

//Incia o GTK+
gtk_init(&argc, &argv);

//Cria o botão com label


button = gtk_button_new_with_label("Hello world");

//Altera o tamanho do botão


gtk_widget_set_size_request(button, 200, 70);

//Conecta o sinal "clicked" do botão ao callback "hello"


gtk_signal_connect(GTK_OBJECT(button), "clicked", onClick, NULL);

//Cria a janela
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//Seta o título
gtk_window_set_title(GTK_WINDOW(window), "Tchelinux");

//Conecta o sinal de destruir ao método de encerrar o GTK+


gtk_signal_connect(GTK_OBJECT(window), "destroy", gtk_main_quit, NULL);

//Adiciona o botão a janela


gtk_container_add(GTK_CONTAINER(window), button);

//Mostra a janela com o botão


gtk_widget_show_all(window);

//Inicia o GTK+
gtk_main();
}
Qual bind escolher?

 O melhor para sua necessidade


Glade
Glade

<?php
$glade = new GladeXML('teste.glade');

$botao = $glade->get_widget('button');
$label = $glade->get_widget('label');

$botao->connect_simple('clicked', 'hello_world', $label);

function hello_world($label)
{
$label->set_text('Hello World');
}

Gtk::Main();
?>
GTK+ e openGL = GtkGLExt
Obrigado

 Contato:
 frede.sch@gmail.com
 Listas
 pygtk@daa.com.au
 gtk-list@gnome.org
 phpgtk@googlegroups.com