quarta-feira, abril 11, 2007

Primeira aula de Java

Hoje eu assisti minha primeira aula de Java! Na verdade de Programação Orientada a Objetos, com Java. Eu vejo muitas pessoas na comunidade Python criticar muito a linguagem..."em Python se programa muito mais rápido"..."o código é bem mais limpo e organizado"...etc, etc. So em comparar visualmente os dois códigos, é facil ver que em Python fica realmete bem mais fácil de ler, porém essa é a unica comparação que eu posso fazer, pois nao conheço Java, ainda.

A pouco mais de um ano atrás eu estava no primeiro período do meu curso de Sistemas de Telecomunicações, no CEFET-PB, tendo minha primeira aula de algoritmo, e foi lá realmente onde eu descobri "o que é programação". No mesmo perído foi dado Pascal, onde fiz meus primeiros códigos, gostei, mas ainda sem muita animação. Um amigo da turma, Flávio Ribeiro, já me falava algo sobre Python, mas não dei muita atenção.

No próximo período veio C, já comecei a me interessar mais pelos códigos, achei legal o tratamento quase que direto com a máquina que C proporciona, preocupando-se com cada byte na alocação de variáveis e tal. Nessa época já tinha visto alguns códigos em Python, mas como não ouvia falar muito da linguagem, ainda não dei muita atenção.

Nessa mesma época aconteceu o EPSL - Encontro Potiguar de Software Livre, em Natal-RN. Assisti a palestra sobre TurboGears, com Humberto Diógenes e Jonatas Oliveira, já comecei a olhar Python com outros olhos. E quando Osvaldo Santana aprensentou o 770 e a plataforma Maemo, comecei a ficar fascinado por Python. Teve um minicurso sobre Python, também com o Humberto que foi a gota d'água, não via a hora de chegar em casa e começar a programar em Python!

E aqui estou até hoje. Como no curso de Telecomunicações, aquela cadeira de C seria a ultima de programação, decidi transferi para um curso, tambem no CEFET-PB, totalmente voltado pra desenvolvimento web, Sistemas para Internet, e claro, muito Java.
E como Java só é visto a partir do terceiro período(não consegui dispensar nem C porque a carga horária é maior), decidi começar a assistir aula como ouvinte.

Mas claro que não vou parar de estudar Python, o livro Beginning Python, da Wrox, não sai da minha mesa! A unica diferença é que daqui a um tempo eu vou poder comparar as duas linguagens, sabendo o que estou falando....e acho que já sei qual vou preferir......... :)

terça-feira, abril 10, 2007

Introdução a PyGTK - parte 1

A um tempo venho mechendo bastante em PyGTK, aprendi muita coisa interessante(ainda falta muuito). Apesar de eu estar usando Glade pra "desenhar" minhas interfaces, vou começar falando de "puro" PyGTK.
Dependendo da distribuição de Linux usada, ela já traz o PyGTK instalado, senão você pode encontrar para Linux/Unix e Windows aqui.

Depois de instalado, vamos verificar se tá tudo bem. No interpretador vamos importá-lo:

>>> import pygtk
>>> pygtk.require('2.0')

Não retornando nenhum erro, tá tudo OK. Já existem versões mais novas que a 2.0, a mais atual estável e a 2.10.x.
E importante saber que vamos trabalhar com widgets, um widget é qualquer parte da interface. Um botão é um widget, assim como a janela, uma entrada de texto, etc.
Agora vamos ao código.

class primeiraJanela:
   def __init__(self):
     self.janela = gtk.Window()
     self.janela.set_title('Minha janela')
     self.botao = gtk.Button('Ola Mundo')
     self.janela.add(self.botao)

Aqui nós acabamos de criar uma janela e um botao, colocamos um título na janela e adicionamos o botao nessa janela.
Quando um botão é clicado, o widget emite um sinal. Nós devemos capturar esse sinal e associá-lo a um handler, que nada mais é do que uma função no código, que fará alguma coisa quando receber tal sinal.

     self.botao.connect('clicked', self.botaoClicado)
    self.janela.connect('destroy', self.fecharTudo)

Ao botão, relacionamos o sinal 'clicked' com a função botaoClicado que vamos fazer em seguida. O sinal 'destroy' associando a janela, é quando clicamos no X pra fechá-la. Existem vários tipos de sinais, mas esses servirão por enquanto.
É necessário mostrar cada widget cridado, com o método show(). Basicamente é isso. Criamos o widget, associamos seu sinal com uma função e mostramos ele.
O correto é chamar o método show() tanto para a janela quanto para o botão. Mas tem o show_all(), que mostrará os dois.

     self.janela.show_all()

Pronto. Esse foi o __init__ de nossa classe principal. Agora vamos fazer nossa funções de callbacks, que no caso são somente duas: uma para o botão e uma para fechar a janela

   def botaoClicado(self, button):
     print 'Ola mundo do PyGTK!!' 
  def fecharTudo(self, window):
    self.janela.hide()
    gtk.main_quit()

Quando o botão for clicado, aparecerá no terminal a mensagem: Ola mundo do PyGTK!!
O botao de fechar a janela for clicado, a jenela será escondida, e o programa será fechado.
Aqui termina a nossa classe principal. Agora so falta chamá-la

if __name__ == '__main__':
  primeiraJanela()
  gtk.main()

O código completo está abaixo. Existe muita documentação sobre PyGTK, inclusive no site da nossa comunidade[1]
E claro a documentação oficial[2]


import pygtk
import gtk

class primeiraJanela:
  def __init__(self):
     self.janela = gtk.Window()
     self.janela.set_title('Minha janela')
     self.botao = gtk.Button('Ola mundo!')

     self.janela.add(self.botao)

     self.janela.connect('destroy', self.fechar)
     self.botao.connect('clicked', self.botaoClicado)

     self.janela.show_all()

  def botaoClicado(self, button):
     print 'Ola mundo do PyGTK!'

  def fechar(self, window):
     self.janela.hide()
     gtk.main_quit()

if __name__ == '__main__':
  primeiraJanela()
  gtk.main()

[1]Python Brasil
[2]Tutorial PyGTK