23.9.09

Estudo Python + GTK + Glade - Aula 01

Ola, recentemente resolvi dedicar um tempo para estudar python por ser uma linguagem presente em todas as distribuições Linux, e servir muito bem para criar scripts de automatização de tarefas em servidores. Como sou uma pessoa determinada resolvi estudar Python + GTK para dar uma cara melhor em alguns scripts que eu vier a fazer para algum cliente.
Como uma das melhores forma de aprender é ensinando, vou montar os meus estudos em forma de Aulas, espero poder ajudar alguém.


Aula 01 -  Python + GTK + Glade



Historia
Lançada em 1991 por Guido van Rossum, derivada da linguagem ABC ela tem como características ser uma linguagem de alto nível ( bem próximo da linguagem humana ), interpretada ( não cria executável ) e imperativa( bem próximo da forma humana de pensar), orientada a objetos ( o programa é dividido em partes, chamadas de objetos, onde todo o programa é baseado na interação e composição deste objetos ) de tipagem dinâmica e forte ( o tipo dos dados são definidos em tempo de execução).
Sei que ficou bem curto mas para saber mais basta uma pequena busca no google.

Instalando

Na maioria da distribuições Linux python já vem instalada por padrão, então o unico trabalho que temos é de instalar a libgtk e o glade.
Para as distribuições Debian Like basta um apt-get install


#apt-get update
#apt-get install glade python-lxml vim-glade

Aproveitei para instala o suporte do vim para programação python, já que uso ele como IDE de desenvolvimento.
Apos isto basta acessar "Aplicações->Programação->Construtor de Interfaces Glade".



Para facilitar nossos estudos, acesse no glade "Ver->Aparência da Paleta->Texto ao lado dos Ícones".
A tela do Glade é dividida em 4 partes.


  1. Ferramentas e Menus na areá superior.
  2. Componentes ou widgets, como são chamados, no lado direito.
  3. Tela, ou seja onde será visualizado a interface grafica do seu programa, na parte central.
  4. Propriedades dos componentes ou widgets, no lado direito.
O Glade é um editor de interface gráfica, ele pode ser usado junto com varias linguagens diferentes, não somente com a Python. A ideia por traz dele é que a definição da interface gráfica fiquem fora do seu código, em um arquivo XML separado. Isto serve tanto para simplificar seu código, que fica menor e mais enxuto, ou seja mais fácil de entender, como também para facilitar a alteração da interface gráfica sem a necessidade de alterar o código fonte, simplificando a manutenção do programa ^_^.
Agora vamos criar nossa primeira interface com o Glade!

Primeira interface com o Glade
  1. Em componentes, click em "Janela"
  2. Na parte central aparecera um quadrado cinza, esta seria a janela principal.
  3. Em propriedades no lado direito altere o campo "Nome" da aba "Geral" para mainWindow ( guarde isto pois vamos usar depois na programação).


Ainda em "Propriedades" mas agora na aba "Comum", verifique se o campo "Visível" esta marcado com "sim", caso esteja "não" altere com um click. Isto já me deu dor de cabeça quando estava aprendendo.


Pronto agora salve o seu projeto na mesma pasta que você colocara os fontes. Se você abrir o arquivo salvo em qualquer editor de texto, vai ser parecido com este.


Primeiro programa em Python.

Com o seu editor de texto preferido crie um novo arquivo com o seguinte conteúdo.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade

class Programa(object):
 """
 Programa simples que abre uma janela atravez de um arquivo do glade
 """

 def __init__(self):
  # Pegando o arquivo Glade
  self.arquivoglade = "programa.glade"
  # Extraindo a representação xml do arquivo
  self.xml = gtk.glade.XML(self.arquivoglade)

  # Componentes

  # Janela
  self.mainWindow = self.xml.get_widget('mainWindow')

  # Eventos

  # Fecha a janela
  self.mainWindow.connect('destroy', gtk.main_quit)

if __name__ == "__main__":
 w = Programa()
 gtk.main()


Explicando.
Nas linhas,

#!/usr/bin/env python
# -*- coding: utf-8 -*-

Na primeira linha estamos dizendo ao sistema operacional qual o interpretador que iremos usar para executar o programa, isto quer dizer que se dermos permissão de execução ao script ele vai automaticamente chamar o Python.
Na segunda linha estamos falando ao Python qual a codificação que estamos usando no script, isto permite que utilizemos acentuação sem problemas, No caso estamos utilizando UTF-8.

import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade

Nesta parte estamos importando as bibliotecas necessárias para utilizar o python com gtk e glade.

class Programa(object):

Cria uma classe chamada "Programa".

def __init__(self):
  
  self.arquivoglade = "programa.glade"
  
  self.xml = gtk.glade.XML(self.arquivoglade)


Nesta linha estamos dizendo ao programa que quando a classe "Programa" for instanciada, ela ira buscar o arquivo chamado "programa.glade", que é a interface criada anteriormente no Glade e salva na mesma pasta onde está o script, altere para o nome que você utilizou na sua interface.
Depois, na ultima linha, o programa ira extrair as informações da interface no arquivo.
Agora que temos a interface vamos trabalhar com ela.

self.mainWindow = self.xml.get_widget('mainWindow')

Nesta linha estamos pegando a janela principal que criamos no Glade, lembra "mainWindow", e salvando sua referencia em uma variável, "self.mainWindow".
Como já temos a acesso a janela que criamos, colocamos uma funcionalidade nela, toda vez que alguém clickar no botão "x" no alto dela, "destroy", o programa ira fechar, chamamos a função "gtk.main_quit".

self.mainWindow.connect('destroy', gtk.main_quit)

Experimente comentar esta linha para ver, a janela some só que o programa não finaliza.

if __name__ == "__main__":
 w = Programa()
 gtk.main()

Nesta parte final estamos falando que quando rodar o script, instanciar a classe programa na variável "w". E apos isto fica esperando algum evento do usuário, "gtk.main"
Para executar este programa você tem duas opções,
  1. Atribua ao script a permissão de execução.
  2. Em um terminal digite "$python programa.py", no caso substitua pelo nome que você deu para o script.

Algumas observações:
Em python a identação, ou seja os espaços, tabulações contam. Ou seja para que o programa funcione corretamente, ele tem que ser mantido exatamente como esta digitado. Como exemplo podemos pegar as ultimas três linhas do programa.

if __name__ == "__main__":
 w = Programa()
 gtk.main()

Observem como as duas ultimas linhas então com um "tab" em relação a primeira linha. Se elas forem digitadas assim

if __name__ == "__main__":
w = Programa()
gtk.main()

Ou seja sem a tabulação, vai aparecer o seguinte erro.

File "programa.py", line 32
    w = Programa()
    ^
IndentationError: expected an indented block

shell returned 1

Python também é sensível a contexto, ou seja ela diferencia letras maiúsculas de minusculas. Ex: "mainWindow" é diferente de MainWindow que é diferente de MAINWINDOW, lembre-se disto.
Bem para a primeira aula já esta grande demais. Na próxima semana estaremos aprendendo sobre variaveis, entrada de texto e botões com GTK.

Um comentário:

Unknown disse...

E quando será a proxima aula?