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.