Arquivo para interface gráfica

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.