InFog

Um blog sobre GNU, Linux, Open Source, Desenvolvimento e Nerdices em Geral

Curso de Python – Aula 19 – PyGTK e sua documentação

Tags: , ,

Olá pessoal!

Aqui vamos nós para mais uma aula de Python!

Mas antes disso eu gostaria de lembra-los que a vaquinha para nos ajudar na viagem de lua de mel ainda está rolando! Já tivemos algumas contribuições e eu agradeço muito aos que ajudaram, mas infelizmente ainda estamos longe até mesmo de 10% do valor =( Se você quiser ajudar também basta clicar na simpática vaquinha abaixo e doar.

Vakinha Lua de Mel em Buenos Aires

Dado o recado vamos à aula!

Hoje veremos um pouco mais sobre os conectores e também vamos aprender a encontrar respostas na documentação do PyGTK.

É através dos conectores que nós conseguimos ligar as ações do usuário na interface às funções do programa. Na aula 16, nosso primeiro contato com PyGTK, já existe uma demonstração de um conector ligando o evento “clique” de um botão à função “ola_mundo“.

Primeiro precisamos saber que não existe apenas o sinal ‘clicked’, alguns widgets do PyGTK apresentam outros tipos de sinais, então nossa missão é descobrir que sinais são esses. Mas como faremos isso? Simples, basta ter alguns conhecimentos que você já deve possuir: Leitura e Navegação na Web heheh. Na página de referência do PyGTK você encontra a documentação de todos os componentes desta API.

Pois bem, vamos fazer o seguinte exemplo: Uma janela com um rótulo e um botão, quando o mouse passar sobre o botão o rótulo deve dizer “O mouse está sobre o botão!” e quando deixa-lo a mensagem muda para “O mouse saiu de cima do botão!”. Aqui está um modelo para a janela:

aula_19_1

Janelinha bonitinha, não? Fiz no Inkscape =)

Bem, agora que já temos o modelo precisamos escrever o código para esta janela:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import pygtk
import gtk
class CJanela():
    __doc__ = """
        Classe CJanela, desenha uma janela com um label e um botão em uma
        caixa vertical.
    """

    def __init__(self):
        self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.janela.set_title("Aula 19, Sinais")
        self.rotulo = gtk.Label()
        self.botao = gtk.Button("Passe o mouse")
        self.caixa = gtk.VBox()
        self.caixa.pack_start(self.rotulo)
        self.caixa.pack_start(self.botao)
        self.janela.add(self.caixa)
        self.janela.show_all()
janela = CJanela()
gtk.main()

Vejam que desta vez estou usando uma metodologia diferente, fiz uma classe CJanela que é a responsável por exibir a janela e seu conteúdo. Acredite em mim esta metodologia facilita muito o acesso aos widgets.

Ora, ora, já temos a janela com o rótulo e o botão, agora nos resta programar as ações e “mouse sobre” e “mouse sai”. Então vamos recorrer à documentação do PyGTK, como vamos usar os sinais do botão então é a documentação deste que devemos ver.

Vejam na área “gtk.Button Signal Prototypes“, este widget nos oferece seis sinais: activate, clicked, enter, leave, pressed e released. Para o que queremos fazer os sinais ‘enter’ e ‘leave’ serão suficientes. Reparem que na referência diz que o sinal ‘clicked’ é praticamente o único que uma aplicação precisa, mas não aqui nas aulas do InFog heheh.

Então vamos criar as funções ‘mouse_sobre’ e ‘mouse_saiu’, elas serão as responsáveis por alterar o texto do rótulo, e usaremos os conectores para ligar os sinais do botão à estas funções, vejam o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import pygtk
import gtk
class CJanela():
    __doc__ = """
        Classe CJanela, desenha uma janela com um label e um botão em uma
        caixa vertical.
    """

    def __init__(self):
        self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.janela.set_title("Aula 19, Sinais")
        self.rotulo = gtk.Label()
        self.botao = gtk.Button("Passe o mouse")
        self.botao.connect('enter', self.mouse_sobre)
        self.botao.connect('leave', self.mouse_saiu)
        self.caixa = gtk.VBox()
        self.caixa.pack_start(self.rotulo)
        self.caixa.pack_start(self.botao)
        self.janela.add(self.caixa)
        self.janela.show_all()
    def mouse_sobre(self, widget):
        self.rotulo.set_text("O mouse está sobre o botão!")
    def mouse_saiu(self, widget):
        self.rotulo.set_text("O mouse saiu de cima do botão!")
janela = CJanela()
gtk.main()

Vejam o resultado:

captura_de_tela-aula-19-sinais

captura_de_tela-aula-19-sinais-1

Bem simples né? O legal do PyGTK é que na maioria das vezes, para aplicações mais simples, a sua preocupação será com o negócio e não com o PyGTK com em sí, já que sua manipulação não é algo tão complexo.

E essa foi a nossa aula de hoje, espero que tenham gostado e aprendido bastante.

Lição de Casa!

Rá! Pensou que ia ficar só nisso né? Agora é a hora de botar a cachola para funcionar! A lição de hoje é simples, quero que vocês façam uma janela com um rótulo e quatro botões: “maximizar“, “desfazer maximização“, “tela cheia” e “desfazer tela cheia“. Quando clicados os botões devem fazer as devidas ações e o rótulo deve mostrar o status da janela, exemplo: “Janela Maximizada“, “Janela em Tela Cheia“, etc. Boa sorte! E não se esqueça de contribuir com a nossa Vakinha!

15 Comentários

Vakinha para nossa Lua de Mel! É hora de botar a mão no bolso e ajudar =)

Tags: , ,

Olá pessoal!

Hoje estou fazendo um post diferente do comum. Hoje o assunto não é Python, Linux, WordPress ou essas nerdices que geralmente abundam aqui pelo blog.

Se você leu o post Game Over, então já deve estar sabendo que eu vou me casar em breve, mais precisamente no dia 20 de junho. Ah, para quem não sabe a minha noiva é a Cássia Luz.

Bem, estamos planejando uma senhora viagem para nossa Lua de Mel, queremos passar cinco dias na capital da Argentina, Buenos Aires, e infelizmente não dispomos de toda a grana necessária para a realização deste sonho. Por isso resolvemos entrar na onda dos “Vakeiros” e criamos uma vaquinha no Vakinha.com.br. Neste serviço é possível fazer as populares vaquinhas e arrecadar um dinheirinho para realizar algo importante.

Vakinha Lua de Mel em Buenos Aires

Então é isso pessoal, acessem nossa vaquinha e deixem suas contribuições. Ahh, digo mais, se sobrar alguma grana depois da nossa viagem eu prometo que compro algum item geek e sorteio aqui no blog, vocês sabem que eu sorteio mesmo!

Eu sei que é meio complicado doar algo, ainda mais dinheiro, mas tenha certeza que é por uma boa causa. Se cada um dos leitores do feed doar, por exemplo, R$ 10,00, a vaquinha se completará rapidamente.

Conto com vocês (acessar a vakinha).

InFog

6 Comentários

© 2009 InFog. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.