Guia Rapido de PyGTK

From OLPC
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Introdução

Este é um tutorial baseado principalmente no PyGTK 2.0 Tutorial [1]. Nossa intenção aqui é mostrar o funcionamento da linguagem de programação Python, cujo link para a pagina oficial do projeto encontra-se aqui [2], utilizando para isto o PyGTK. A motivação para criação do mesmo derivou do fato desta linguagem de programação ter sido eleita como a oficial do projeto One Laptop Per Child.

Iniciando o Python

Para iniciarmos uma janela no Sugar (sistema operacional do XO) necessitamos criar uma atividade. Um modo fácil de contornar isto antes de aprendermos a criar a atividade é iniciando um novo X no terminal. Para isto abra o Console (Alt + =) e clique em Terminal:


Sugar terminal.png


Fig. 1.1. - Terminal do XO


(...)$ su
(...)# startx -- :1


No novo X que surgirá, com o mouse posicionado em cima da janela digite:

geany


Geany.png


Figura 1.2. - Janela do Geany

E vamos iniciar nosso primeiro programa (o número das linhas irá surgir automáticamente):

   1   #!/usr/bin/env python
   2
   3   # example base.py
   4
   5   import pygtk
   6   pygtk.require('2.0')
   7   import gtk
   8
   9   class Base:
  10       def __init__(self):
  11           self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  12           self.window.show()
  13
  14       def main(self):
  15           gtk.main()
  16
  17   print __name__
  18   if __name__ == "__main__":
  19       base = Base()
  20       base.main()

Após digitar este código salve-o (clicando no Salvar) com o nome base.py Agora execute o programa. (No botão Executar)

Uma figura similar com essa irá surgir:
File:Base.png!center

Fig 1.3. - Base.py

Olá a Todos!

Agora vamos ao nosso primeiro programa com um widget (um botão). Antes de passar ao código em si um pouco de teoria. No meio do código abaixo vocês irão perceber a presença de muito texto, explicando o que acontece no programa. Esta é uma pratica muito comum e muitas vezes necessarias, já que muitas vezes fazemos programas que serão posteriormente utilizado por outros e sem comentários fica díficil de outra pessoa dar continuidade no trabalho iniciado por você. Neste caso os comentários tem o intuito de explicar cada passo do programa. Em Python toda linha de comentário é precedida por '#' e tudo que seguir será ignorado pelo interpretador.

Programa olatodos.py

 1 #!/usr/bin/env python
 2
 3 import pygtk
 4 import gtk
 5
 6 #Aqui iniciamos nossa classe
 7 class HelloWorld:
 8
 9 # Esta eh uma função de retorno. Neste exemplo os argumentos serao ignorados neste exemplo.
10   def hello(self, widget, data=None):
11      print "Ola a Todos"
12
13 # Retornando False (falso) nesta funcao o GTK ira emitir o sinal de "destroy". Se voce retornar True
14 # (verdadeiro),significa que voce nao quer que a janela seja fechada, o que eh muito util quando se quer fazer 
15 # surgir uma janela (pop up) para perguntar se o usuario deseja mesmo fechar a janela.
16   def delete_event(self, widget, event, data=None):
17       print "Delecao de evento ocorrida"
18       return False
19 # Troque o False (Falso) acima por True (verdadeiro) e veja o que acontece.
20
21 # Outro retorno
22   def destroy(self, widget, data=None):
23       gtk.main_quit()
24 
25   def __init__(self):
26
27      # Cria uma nova janela (window)
28      self.window = gtk.Window()
29      
30     # Quando a janela da o sinal "delete_event" (em geral dado pelo gerenciador de janelas, normalmente pela 
31     # opcao "close" (fechar), ou na barra de titulo.)
32      self.window.connect("delete_event", self.delete_event)
33  
34     # Aqui conectamos o evento "destroy" ao direcionador de sinal
35     # Este evento ocorre quando chamamos gtk_widget_destroy() na janela, ou se retornamos FALSE na funcao de 
36     retorno "delete_event"
37     self.window.connect("destroy", self.destroy)
38
39     # Escolhe o tamanho do lado da janela
40     self.window.set_border_width(10)
41
42     # Cria um novo botao com o rotulo "Clique Aqui".
43     self.button = gtk.Button("Clique Aqui")
44
45     # Quando o botao recebe o sinal "clicked" (clicado), ele chama a funcao hello(), mandando None (Nada) como 
46     # argumento. A funcao hello() esta definida acima.
47     self.button.connect("clicked", self.hello, None)
48
49     # Isto causara a destruicao da janela chamando gtk_widget_destroy(window) quando "clicked"(clicado).
50     # Novamente o sinal poderia vir daqui ou do gerenciador de janelas
51     self.button.connect_object("clicked", gtk.Widget.destroy, self.window)
52     
53     # Este comando empacota o botao dentro da janela
54     self.window.add(self.button)
55
56     # O passo final para mostrar o mais novo widget criado
57     self.button.show()
58
59     # e a janela
60     self.window.show()
61
62  def main(self):
63     # Todas as aplicacoes PyGTK tem que ter um gtk.main(). O controle acaba aqui e
64     # aguarda um evento ocorrer (como um clique de mouse ou um pressionar de tecla)
65     gtk.main()
66
67 # Se o programa rodar diretamente ou for passado como um argumento para o interpretador de python
68 # ele criara uma HelloWord e o mostrara.
69 if __name__ == "__main__":
70   hello = HelloWorld()
71   hello.main()

Olatodos.png

Fig 3.1. - Figura gerada a partir do olatodos.py

Olhando mais a fundo o Olá a Todos!

Vamos agora dar uma olhada mais profunda no olatodos.py e discutir um pouco sobre o conteúdo do programa.

A primeira linha do programa:


1 #!/usr/bin/env python


Esta linha é obrigatória em todo programa escrito em python e diz ao interpretador que ele deve transformar o arquivo em executável.

Em seguida temos:

3 import pygtk
4 import gtk

Estas linhas de comando importam o pygtk e o gtk, respectivamente. GTK é um conjunto de métodos desenvolvido para a linguagem de programação C/C++ utilizado para gerar as janelas e os botões. O PyGTK é quem fornece a interface entre o Python e o GTK, nos permitindo assim utilizar métodos feitos em uma linguagem em outra.

A palavra reservada class é utilizada antes de iniciarmos uma classe e é seguida pelo seu nome e ":"

7 class HelloWorld:

As funções de retorno sempre são definidas pelo nome e seguidas pelos argumentos que elas utilizam.

10 def hello(self, widget, data=None):