SlideShare uma empresa Scribd logo
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

    Cairo para desenhos básicos
    Pango para renderizar e formatar textos
    GLib para o baixo nível
        Multi-thread
        Multi-plataforma
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 Worldn";
}

#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 worldn");
}

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();
}
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();
 ?>
Qual bind escolher?

    O melhor para sua necessidade
GTK+ e openGL = GtkGLExt
Obrigado

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

Mais conteúdo relacionado

Semelhante a GTK

Criando aplicações com PHP-GTK
Criando aplicações com PHP-GTKCriando aplicações com PHP-GTK
Criando aplicações com PHP-GTK
Pablo Dall'Oglio
 
Ruby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo CastellaniRuby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo Castellani
Hugo Borges
 

Semelhante a GTK (8)

Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
FLTK Summer Course - Part II - Second Impact
FLTK Summer Course - Part II - Second ImpactFLTK Summer Course - Part II - Second Impact
FLTK Summer Course - Part II - Second Impact
 
Criando aplicações com PHP-GTK
Criando aplicações com PHP-GTKCriando aplicações com PHP-GTK
Criando aplicações com PHP-GTK
 
Aula menus
Aula menusAula menus
Aula menus
 
Ruby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo CastellaniRuby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo Castellani
 
Ruby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo CastellaniRuby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo Castellani
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Clean code
Clean codeClean code
Clean code
 

GTK

  • 2. 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
  • 3. Casos de sucesso  GIMP
  • 4. Casos de sucesso  GNOME
  • 5. Casos de sucesso  MAEMO
  • 6. Casos de sucesso  Firefox
  • 7. Características do GTK+  Multiplataforma  Multithread  Orientado a eventos  Orientado a objeto  Escrito em C  Bem documentado
  • 8. Multiplataforma  Cairo para desenhos básicos  Pango para renderizar e formatar textos  GLib para o baixo nível  Multi-thread  Multi-plataforma
  • 10. 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
  • 11. Binds
  • 12. 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()
  • 13. Hello World PHP-GTK <? #Cria o callback chamado no evento "clicked" do botão. function onClick() { echo "Hello Worldn"; } #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(); ?>
  • 14. 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 worldn"); } 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(); }
  • 15. Glade
  • 16. 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(); ?>
  • 17. Qual bind escolher?  O melhor para sua necessidade
  • 18. GTK+ e openGL = GtkGLExt
  • 19. Obrigado  Contato:  frede.sch@gmail.com  Listas  pygtk@daa.com.au  gtk-list@gnome.org  phpgtk@googlegroups.com