0
Mantendo a Sanidade Com o Glade Marcelo Lira dos Santos INdT Recife
"horrores que o homem não deveria saber que existem"
&quot;horrores que o homem não deveria saber que existem&quot; <ul><li>Processo de criação de uma aplicação gráfica: </li>...
&quot;horrores que o homem não deveria saber que existem&quot;
Preliminares
GTK+ <ul><li>Toolkit gráfico multiplataforma </li></ul><ul><ul><li>Linux, Windows, MacOS X </li></ul></ul><ul><li>Escrito ...
Widgets <ul><li>Elemento da interface com o qual o usuário interage </li></ul><ul><li>Widget: Window Gadget </li></ul><ul>...
GTK+ GTK+ GDK GLib (all your) Widgets (are belong to us) Abstração das funções primitivas de desenho da plataforma Orienta...
Bindings <ul><li>Zilhões de bindings </li></ul><ul><li>Vantagem: use sua linguagem preferida </li></ul>C++ (gtkmm) Python ...
Dissecando a Estrutura <ul><li>Uma aplicação simples num simples ambiente gráfico </li></ul>
Dissecando a Estrutura <ul><li>Servidor X </li></ul><ul><li>Gerenciador de Janelas </li></ul><ul><li>Janela GDK </li></ul>...
Descrevendo a Estrutura <ul><li>XML </li></ul><ul><ul><li>Boa para descrever estrutura <janela> <caixadetexto/>   <botao/>...
Analisando o Comportamento <ul><li>Conceitos </li></ul><ul><ul><li>Eventos </li></ul></ul><ul><ul><li>Main Loop </li></ul>...
Camadas Dizem que é uma boa prática de programação!
Codando
Codando Interfaces (em C) <ul><li>#include <gtk/gtk.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao cli...
Codando Interfaces (em Vala) <ul><li>using GLib; using Gtk; public class Hello : Window {   [Widget] protected VBox vbox; ...
Codando Interfaces (em Python) <ul><ul><li>setanta@poe:~/mantendoasanidade$ python </li></ul></ul><ul><ul><li>>>> import g...
DevHelp (pra não ter de lembrar de tudo e esquecer seu nome)
Usando o Glade (a aplicacão)
Arquivo Glade
Usando a LibGlade <ul><li>Constrói a interface a partir do XML contido: </li></ul><ul><ul><li>num arquivo </li></ul></ul><...
Usando a LibGlade (em C) <ul><li>// file: hello_glade.c #include <gtk/gtk.h> #include <glade/glade.h> void on_button_click...
Codando Interfaces (em Python) <ul><ul><li>setanta@poe:~/mantendoasanidade$ python </li></ul></ul><ul><ul><li>>>> import g...
Possibilidades
GtkBuilder <ul><li>A partir de GTK+ 2.12, pode-se usar  GtkBuilder  para construir interfaces a partir de descrições em XM...
E se...? <ul><li>O XML de uma interface criada no Glade poderia ser convertido para HTML+CSS+JavaScript </li></ul>
Referências <ul><li>http://www.gtk.org </li></ul><ul><li>GTK+ em Win32 http://gladewin32.sourceforge.net/modules/news/ </l...
Notas (para mim mesmo) -- APAGUE <ul><li>escolha um ponto para mencionar o DevHelp e os pacotes -doc </li></ul><ul><li>men...
<ul><li>Atribuição-Compartilhamento pela mesma licença 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/deed.pt ) </li>...
Upcoming SlideShare
Loading in...5
×

Mantendo a Sanidade com o Glade

4,184

Published on

Dicas de como usar o glade para criar interfaces com o usuário de forma mais fácil.

Published in: Technology
2 Comments
1 Like
Statistics
Notes
  • java++ é melhor que python e o glade não funciona no windows 98. eu tenho testei nao funfou pelo contrario deu erro no pc todo tive que formatar e instalar o kurumin 3.1, mas depois eu consegui instalar o ubuntu 10.9 mas ficou lento, pois meu pc é de 1995 e ficou uma droga de usar, então instalei o windows 95 e está leve mas nada roda...
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • python é dificil, mais dificil que beos
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
4,184
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
136
Comments
2
Likes
1
Embeds 0
No embeds

No notes for slide
  • Transcript of "Mantendo a Sanidade com o Glade"

    1. 1. Mantendo a Sanidade Com o Glade Marcelo Lira dos Santos INdT Recife
    2. 2. &quot;horrores que o homem não deveria saber que existem&quot;
    3. 3. &quot;horrores que o homem não deveria saber que existem&quot; <ul><li>Processo de criação de uma aplicação gráfica: </li></ul><ul><ul><li>Criar a interface com alguma aplicação visual </li></ul></ul><ul><ul><li>Gerar código </li></ul></ul><ul><ul><li>Alterar código gerado </li></ul></ul><ul><ul><li>Precisar alterar a interface </li></ul></ul><ul><ul><li>Gerar mais código </li></ul></ul><ul><ul><li>Re-inserir alterações no novo código gerado </li></ul></ul><ul><ul><li>Voltar indefinidamente ao passo 4 </li></ul></ul><ul><ul><li>Perder o juízo </li></ul></ul>
    4. 4. &quot;horrores que o homem não deveria saber que existem&quot;
    5. 5. Preliminares
    6. 6. GTK+ <ul><li>Toolkit gráfico multiplataforma </li></ul><ul><ul><li>Linux, Windows, MacOS X </li></ul></ul><ul><li>Escrito em C </li></ul><ul><li>Usado por </li></ul><ul><ul><li>GNOME </li></ul></ul><ul><ul><li>XFCE </li></ul></ul><ul><ul><li>Maemo </li></ul></ul><ul><ul><li>OLPC </li></ul></ul><ul><ul><li>OpenMoko </li></ul></ul>
    7. 7. Widgets <ul><li>Elemento da interface com o qual o usuário interage </li></ul><ul><li>Widget: Window Gadget </li></ul><ul><li>Propriedades importantes de um widget: </li></ul><ul><ul><li>Identificação (nome) </li></ul></ul><ul><ul><li>Estímulos aos quais ele responde </li></ul></ul><ul><ul><li>Instruções para disposição (layout) </li></ul></ul>
    8. 8. GTK+ GTK+ GDK GLib (all your) Widgets (are belong to us) Abstração das funções primitivas de desenho da plataforma Orientação a Objetos para C (uau!)
    9. 9. Bindings <ul><li>Zilhões de bindings </li></ul><ul><li>Vantagem: use sua linguagem preferida </li></ul>C++ (gtkmm) Python (PyGTK) Java (Java-GNOME) C# (GTK#/Mono) Vala PHP (PHP-GTK) Perl (gtk2-perl) Haskell (Gtk2Hs) Ruby (Ruby-GNOME2) Lua (lua-gtk) D (DUI) Ada (GtkAda) GTK+
    10. 10. Dissecando a Estrutura <ul><li>Uma aplicação simples num simples ambiente gráfico </li></ul>
    11. 11. Dissecando a Estrutura <ul><li>Servidor X </li></ul><ul><li>Gerenciador de Janelas </li></ul><ul><li>Janela GDK </li></ul><ul><li>Widget da Janela </li></ul><ul><li>Demais widgets </li></ul>
    12. 12. Descrevendo a Estrutura <ul><li>XML </li></ul><ul><ul><li>Boa para descrever estrutura <janela> <caixadetexto/> <botao/> </janela> </li></ul></ul>
    13. 13. Analisando o Comportamento <ul><li>Conceitos </li></ul><ul><ul><li>Eventos </li></ul></ul><ul><ul><li>Main Loop </li></ul></ul><ul><ul><li>Sinais </li></ul></ul><ul><ul><li>Callbacks </li></ul></ul>
    14. 14. Camadas Dizem que é uma boa prática de programação!
    15. 15. Codando
    16. 16. Codando Interfaces (em C) <ul><li>#include <gtk/gtk.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado. &quot;); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *label; GtkWidget *button; gtk_init(&argc, &argv); g_set_application_name(&quot;Perdendo a sanidade...&quot;); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = gtk_vbox_new(FALSE, 2); label = gtk_label_new(&quot;Sou um label!&quot;); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); button = gtk_button_new_with_label(&quot;Me clique!&quot;); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(button), &quot;clicked&quot;, G_CALLBACK(on_button_clicked), G_OBJECT(label)); gtk_container_add(GTK_CONTAINER(window), vbox); g_signal_connect(G_OBJECT(window), &quot;delete_event&quot;, G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } </li></ul>
    17. 17. Codando Interfaces (em Vala) <ul><li>using GLib; using Gtk; public class Hello : Window { [Widget] protected VBox vbox; [Widget] protected Label label; [Widget] protected Button button; void on_button_clicked(Button button) { stdout.printf(&quot;Botao clicado. &quot;); } construct { label = new Label(&quot;Sou um label!&quot;); button = new Button.with_label(&quot;Me clique!&quot;); button.clicked += on_button_clicked; vbox = new VBox(false, 2); vbox.pack_start(label, true, true, 0); vbox.pack_start(button, false, true, 0); add(vbox); delete_event += Gtk.main_quit; } static int main (string[] args) { Gtk.init(out args); Environment.set_application_name(&quot;Perdendo a sanidade...&quot;); Hello hello = new Hello(); hello.show_all(); Gtk.main(); return 0; } } </li></ul>
    18. 18. Codando Interfaces (em Python) <ul><ul><li>setanta@poe:~/mantendoasanidade$ python </li></ul></ul><ul><ul><li>>>> import gtk </li></ul></ul><ul><ul><li>>>> window = gtk.Window() </li></ul></ul><ul><ul><li>>>> vbox = gtk.VBox() </li></ul></ul><ul><ul><li>>>> label = gtk.Label(&quot;Sou um label!&quot;) </li></ul></ul><ul><ul><li>>>> button = gtk.Button(&quot;Me clique!&quot;) </li></ul></ul><ul><ul><li>>>> vbox.pack_start(label) </li></ul></ul><ul><ul><li>>>> vbox.pack_start(button) </li></ul></ul><ul><ul><li>>>> window.add(vbox) </li></ul></ul><ul><ul><li>>>> def on_button_clicked(button): </li></ul></ul><ul><ul><li>... print button </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>>>> button.connect(&quot;clicked&quot;, on_button_clicked) </li></ul></ul><ul><ul><li>7L </li></ul></ul><ul><ul><li>>>> window.show_all() </li></ul></ul><ul><ul><li>>>> gtk.main() </li></ul></ul>
    19. 19. DevHelp (pra não ter de lembrar de tudo e esquecer seu nome)
    20. 20. Usando o Glade (a aplicacão)
    21. 21. Arquivo Glade
    22. 22. Usando a LibGlade <ul><li>Constrói a interface a partir do XML contido: </li></ul><ul><ul><li>num arquivo </li></ul></ul><ul><ul><li>numa string </li></ul></ul><ul><li>Conectando sinais e eventos </li></ul><ul><ul><li>conexão individual </li></ul></ul><ul><ul><li>autoconnect </li></ul></ul><ul><ul><li>diferencas de uso nas várias linguagens </li></ul></ul>
    23. 23. Usando a LibGlade (em C) <ul><li>// file: hello_glade.c #include <gtk/gtk.h> #include <glade/glade.h> void on_button_clicked(GtkWidget *button) { g_print(&quot;Botao clicado. &quot;); } int main(int argc, char *argv[]) { GladeXML *widget_tree; GtkWidget *window; gtk_init(&argc, &argv); g_set_application_name(&quot;Perdendo a sanidade...&quot;); widget_tree = glade_xml_new(&quot;simple.glade&quot;, NULL, NULL); window = glade_xml_get_widget(widget_tree, &quot;window1&quot;); glade_xml_signal_autoconnect(widget_tree); gtk_widget_show_all(window); gtk_main(); return 0; } ----- para compilar: gcc -rdynamic `pkg-config --libs --cflags gtk+-2.0 libglade-2.0` hello_glade.c -o hello_glade </li></ul>
    24. 24. Codando Interfaces (em Python) <ul><ul><li>setanta@poe:~/mantendoasanidade$ python </li></ul></ul><ul><ul><li>>>> import gtk >>> import gtk.glade </li></ul></ul><ul><ul><li>>>> class Sample: </li></ul></ul><ul><ul><li>... def __init__(self): </li></ul></ul><ul><ul><li>... self.widget_tree = gtk.glade.XML(&quot;sample.glade&quot;) </li></ul></ul><ul><ul><li>... self.window = self.widget_tree.get_widget(&quot;window1&quot;) </li></ul></ul><ul><ul><li>... self.widget_tree.signal_autoconnect(self) </li></ul></ul><ul><ul><li>... self.window.show_all() </li></ul></ul><ul><ul><li>... gtk.main() </li></ul></ul><ul><ul><li>... def on_apply_button_clicked(self, button): </li></ul></ul><ul><ul><li>... print &quot;Botao clicado.&quot; </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>>>> sample = Sample() </li></ul></ul>
    25. 25. Possibilidades
    26. 26. GtkBuilder <ul><li>A partir de GTK+ 2.12, pode-se usar GtkBuilder para construir interfaces a partir de descrições em XML </li></ul><ul><li>Ainda está um tanto incompleta em relação à libglade </li></ul>
    27. 27. E se...? <ul><li>O XML de uma interface criada no Glade poderia ser convertido para HTML+CSS+JavaScript </li></ul>
    28. 28. Referências <ul><li>http://www.gtk.org </li></ul><ul><li>GTK+ em Win32 http://gladewin32.sourceforge.net/modules/news/ </li></ul><ul><li>http://www.pygtk.org/ </li></ul><ul><li>Mantendo a Sanidade com o Glade http://www.cin.ufpe.br/~cinlug/wiki/index.php/Mantendo_A_Sanidade_Com_O_Glade </li></ul>
    29. 29. Notas (para mim mesmo) -- APAGUE <ul><li>escolha um ponto para mencionar o DevHelp e os pacotes -doc </li></ul><ul><li>mencione os pacotes -dev quando comecar a programar </li></ul>
    30. 30. <ul><li>Atribuição-Compartilhamento pela mesma licença 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/deed.pt ) </li></ul><ul><li>Você pode: </li></ul><ul><ul><li>copiar, distribuir, exibir e executar a obra </li></ul></ul><ul><ul><li>criar obras derivadas </li></ul></ul><ul><ul><li>fazer uso comercial da obra </li></ul></ul><ul><li>Sob as seguintes condições: </li></ul><ul><li>Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. </li></ul><ul><li>Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. </li></ul><ul><ul><li>Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. </li></ul></ul><ul><ul><li>Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. </li></ul></ul><ul><li>Qualquer direito de uso legítimo (ou &quot;fair use&quot;) concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima. </li></ul><ul><li>Este é um sumário para leigos da Licença Jurídica (na íntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode ). Termo de exoneração de responsabilidade: http://creativecommons.org/licenses/disclaimer-popup?lang=pt </li></ul>
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×