Criando uma simples janela em pygtk – Parte II

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.

Anúncios

16 Respostas to “Criando uma simples janela em pygtk – Parte II”

  1. Rafael ( lastk ) Says:

    bacana o tutorial cara

  2. Ótima explicação, se poder fazer algo usando glade (carregar um xml) ficaria muito bacana….

  3. Rudson Alves Says:

    Grande iniciativa. Estou estudando pkgtk no manual e esta abordagem é muito mais simples. Parabéns.

  4. […] por Marcos Melo (rabiscosgeraisΘgmail·com) – referência […]

  5. Muito bom o tutorial =)
    Eu pensei em utilizar o PyGTK para o GeSpeak (projeto pessoal), já que o php-gtk não tem tido boa aceitação. Mas resolvi ir de c++ e posso garantir que o Python parece muito mais fácil.

    Abraços

    InFog

  6. Leandro Hamid Says:

    Como eu disse, o tutorial esta muito bom, eu nunca mexi com o pygtk e o seu tutorial esta me incentivando a estudar.De agor aem diante vou acompanhar a sua série de tutoriais sobre pygtk e o seu blog com um todo , legal!!

  7. […] Criando uma simples janela com pygtk Criando uma simples janela em pygtk – parte II […]

  8. […] uma simples janela em PyGTK Criando uma simples janela em PyGTK – parte II DrawingArea – Desenhando na tela com PyGTK Orientação a Objetos com python Orientação a Objetos […]

  9. hola yo soy nuevo en esto, yo tengo el siguiente problema, cuando compilo el codigo me dice que hace falta la libreria pygtk y no se como instalarcela, me puedes ayudar? muchas gracias.

  10. hola yo soy nuevo en esto, yo tengo el siguiente problema, cuando compilo el codigo me dice que hace falta la libreria pygtk y no se como instalarcela, me puedes ayudar? muchas gracias. disculpa digite mi correo mal.

  11. Leonardo Sabadão é dia de futebol Says:

    vai tomar no cu

  12. muito legal o post ..so tive um problema pra conseguir instalar no windows mas consegui
    usei esse site aqui http://geektrouble.blogspot.com.br/2012/01/instalando-python-pygtk-gtk-mysqldb-no.html

  13. Direto ao ponto! e bem explicado, valeu.

  14. Boa noite… Uma pergunta… No meu computado deu erro… Aparece:

    Traceback (most recent call last):
    File “teste.py”, line 22, in cria_quadrado
    desenha(tela,None)
    File “teste.py”, line 48, in desenha
    tela.window.draw_rectangle(gc,True,q[0],q[1],q[2],q[3])

    Fiz uma mudança na linha 12 a 14 :

    #obtendo as coordenadas do clique de mouse
    coor=evento.get_coords()
    x= int(coor[0])
    y= int(coor[1])

    Ai funcionou… Eu tenho que executar de outra maneira para o erro nao aparecer?

  15. Show de site. Muito bom, bem explicado e sucinto nas palavras.

    Parabéns.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: