SlideShare a Scribd company logo
1 of 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

    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

More Related Content

Similar to 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
 

Similar to 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
 

Recently uploaded

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Recently uploaded (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

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