Arquivo para gui

lexadrez – programa exemplo com pygtk

Posted in gtk, Linux, Programação, pygtk, Python, Uncategorized with tags , , , , , , , , , , on 17 / junho / 2008 by medeubranco

Para quem acompanhou os tutoriais de PyGTK deste blog e queria ver um programa mais completo usando drawingArea e outras graças do GTK, eu posso oferecer o programa que escrevi um tempo atrás para rever as partidas de xadrez que eu jogava no yahoo!.

Enquanto escrevia, resolvi que o software poderia ser também uma ferramenta para estudar aberturas, e preparei ele para isso.

Coloquei o programa no codigolivre :
lexadrez.codigolivre.org.br

Como o codigolivre vira e mexe está inacessível, passo o link para baixar direto o código:
lexadrez-0.001.tar.gz

O programa exibindo a Ruy Lopes:

Exibindo a Ruy Lopes

O código foi todo orientado a objetos. As classes estão mais ou menos documentadas, experimente usar o pydoc pelo terminal, no diretório do programa.

Acho que poderia ter sido melhor escrito em vários aspectos: o parser para leitura do jogo está muito POG, as classes são muito dependentes umas das outras, entre outras coisas. Não coloquei o recurso de gravar as aberturas diretamente no programa; se alguém quiser fazê-lo, não está difícil.

Recursos funcionando:

  • exibe jogos e aberturas no formato do yahoo!
  • permite movimentar as peças de acordo com as regras do xadrez
  • edita e salva comentários nas partidas e aberturas

Se você tem mais experiência em OOP, gostaria saber quais “regras” da boa programação eu violei, e de que forma o código poderia ter sido melhor escrito. Juro que não fico chateado. Use e abuse dos comentários.

Criando uma simples janela em pygtk – Parte II

Posted in gtk, Linux, Programação, pygtk, Python with tags , , , , , , , , , , , on 10 / junho / 2008 by medeubranco

No nosso primeiro artigo sobre este assunto, criamos uma janela sem conteúdo algum. Desta vez vamos adicionar alguma funcionalidade a esta janela. Baixe o código fonte abaixo, salve como gtk_window.py e execute-o:

#!/usr/bin/env python

import pygtk
import gtk

def clicada( botao , label ):
    if label.get_text() == "" :
        label.set_text( "obrigado" )
    else:
        label.set_text( "" )

win=gtk.Window( )
win.set_title( 'Titulo da Janela' )

win.set_size_request(200,50)
win.connect( "destroy" , gtk.main_quit )

box=gtk.VBox( )
win.add( box )

label=gtk.Label( "" )
box.pack_start( label )

botao=gtk.Button( "clique-me" )
box.pack_start( botao )
botao.connect( "clicked" , clicada , label )

win.show_all()
gtk.main()

A primeira diferença deste código para o anterior é que agora usamos uma função:

def clicada( botao , label ):
    if label.get_text() == "" :
        label.set_text( "obrigado" )
    else:
        label.set_text( "" )

Esta função, que denominamos “clicada”, está aí para ser uma função de callback para o botão que será criado mais à frente no código. Ela recebe dois parâmetros: um gtk.button e um gtk.Label.

Uma outra novidade é a gtk.VBox criada na linha 18. A VBox (Caixa Vertical) é um container; serve para “acondicionar” os widgets (botões, caixas de texto, rótulos, etc) na janela. Existem outros tipos de container e você pode aprender mais sobre eles em outro lugar.

Na linha 19 ( win.add( box ) ), a gtk.VBox é adicionada a Janela.

Um novo widget é criado na linha 21 [ label=gtk.Label( "" ) ], uma “etiqueta” com rótulo em branco. Esta “etiqueta” é adicionada à gtk.VBox na linha 22 [ box.pack_start( label ) ].

Nas linha 24 e 25 repetimos o procedimento, desta vez com um gtk.Button, um botão.

Agora atenção, pois na linha 26 é que nós dizemos o que vai acontecer quando o botão for clicado:

botao.connect( "clicked" , clicada , label )

Esta linha conecta o sinal “clicked” à função ‘clicada’ ( linhas 6 a 10 ), passando como parâmetro o objeto label. O próprio botão é passado como parâmetro aqui de forma implícita.

Na linha 28 determinamos a exibição da Janela e todos os seus componentes, e na linha 29 chamamos o loop principal.

Copie o código, salve e execute.