Guia Rapido de PyGTK: Difference between revisions
Line 6: | Line 6: | ||
[[ |
[[Image:Sugar_terminal.png]]<br> |
||
<center>'''Fig. 1.1. - Terminal do XO'''</center> |
<center>'''Fig. 1.1. - Terminal do XO'''</center> |
||
Line 19: | Line 19: | ||
[[ |
[[Image:Geany.png]]<br> |
||
<center>'''Figura 1.2. - Janela do Geany'''</center> |
<center>'''Figura 1.2. - Janela do Geany'''</center> |
||
Line 49: | Line 49: | ||
Uma figura similar com essa irá surgir: |
Uma figura similar com essa irá surgir: |
||
<br>[[ |
<br>[[Image:base.png]] |
||
<center> Fig 1.3. - Base.py </center> |
<center> Fig 1.3. - Base.py </center> |
||
Revision as of 18:54, 9 January 2008
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 [3].
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:
(...)$ su (...)# startx -- :1
No novo X que surgirá, com o mouse posicionado em cima da janela digite:
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:
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()
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):