Dependendo da distribuição de Linux usada, ela já traz o PyGTK instalado, senão você pode encontrar para Linux/Unix e Windows aqui.
Depois de instalado, vamos verificar se tá tudo bem. No interpretador vamos importá-lo:
>>> import pygtk
>>> pygtk.require('2.0')
Não retornando nenhum erro, tá tudo OK. Já existem versões mais novas que a 2.0, a mais atual estável e a 2.10.x.
E importante saber que vamos trabalhar com widgets, um widget é qualquer parte da interface. Um botão é um widget, assim como a janela, uma entrada de texto, etc.
Agora vamos ao código.
class primeiraJanela:
def __init__(self):
self.janela = gtk.Window()
self.janela.set_title('Minha janela')
self.botao = gtk.Button('Ola Mundo')
self.janela.add(self.botao)
Aqui nós acabamos de criar uma janela e um botao, colocamos um título na janela e adicionamos o botao nessa janela.
Quando um botão é clicado, o widget emite um sinal. Nós devemos capturar esse sinal e associá-lo a um handler, que nada mais é do que uma função no código, que fará alguma coisa quando receber tal sinal.
self.botao.connect('clicked', self.botaoClicado)
self.janela.connect('destroy', self.fecharTudo)
Ao botão, relacionamos o sinal 'clicked' com a função botaoClicado que vamos fazer em seguida. O sinal 'destroy' associando a janela, é quando clicamos no X pra fechá-la. Existem vários tipos de sinais, mas esses servirão por enquanto.
É necessário mostrar cada widget cridado, com o método show(). Basicamente é isso. Criamos o widget, associamos seu sinal com uma função e mostramos ele.
O correto é chamar o método show() tanto para a janela quanto para o botão. Mas tem o show_all(), que mostrará os dois.
self.janela.show_all()
Pronto. Esse foi o __init__ de nossa classe principal. Agora vamos fazer nossa funções de callbacks, que no caso são somente duas: uma para o botão e uma para fechar a janela
def botaoClicado(self, button):
print 'Ola mundo do PyGTK!!'
def fecharTudo(self, window):
self.janela.hide()
gtk.main_quit()
Quando o botão for clicado, aparecerá no terminal a mensagem: Ola mundo do PyGTK!!
O botao de fechar a janela for clicado, a jenela será escondida, e o programa será fechado.
Aqui termina a nossa classe principal. Agora so falta chamá-la
if __name__ == '__main__':
primeiraJanela()
gtk.main()
O código completo está abaixo. Existe muita documentação sobre PyGTK, inclusive no site da nossa comunidade[1]
E claro a documentação oficial[2]
import pygtk
import gtk
class primeiraJanela:
def __init__(self):
self.janela = gtk.Window()
self.janela.set_title('Minha janela')
self.botao = gtk.Button('Ola mundo!')
self.janela.add(self.botao)
self.janela.connect('destroy', self.fechar)
self.botao.connect('clicked', self.botaoClicado)
self.janela.show_all()
def botaoClicado(self, button):
print 'Ola mundo do PyGTK!'
def fechar(self, window):
self.janela.hide()
gtk.main_quit()
if __name__ == '__main__':
primeiraJanela()
gtk.main()
[1]Python Brasil
[2]Tutorial PyGTK
4 comentários:
O legal é que quando conectamos um sinal à uma função manipuladora(handler) a instância do widget é enviada como argumento.
Sendo assim
em:
def fecharTudo(self, window):
self.janela.hide()
pode-se fazer:
def fecharTudo(self, widget):
widget.hide()
alguns widgets especiais enviam mais de um argumento, isso permite que o trabalho de manipulá-lo seja mais fácil!
legal né!?
Eu até costumo fazer:
def fecharTudo(*args):
args[0].janela.hide()
ou
args[1].hide()
print args
pra ver quais os objetos que foram passados como argumento.
Abraço!
Boa tarde ...
meu nome é Filipe e gostei muito da explicação.
Gostaria de poder ler um tutorial sobre como trabalhar com varias janelas, isso é muito util em aplicacoes comerciais e não tenho achado muita materia sobre o assunto ...
Fica aqui minha gratidão pelo artigo ... valeu mesmo ...
filipefws@gmail.com
Já usei o Glade e não gostei de depender dele.
Então estou desenvolvendo uma IDE
"GenTKode"
Analisem e comentem.
http://w14.easy-share.com/1699583622.html
klebermoura.pa@gmail.com
Ola
Muito bom...
Agora estou tentando fazer de forma que na primeira janela tenho um botao e quando clicaado abra uma nova janela.
COmo fazer isto e como controlar de forma que se ja abriu a segunda janela nao abranovamente mas apenas "set_foucs" nela sem criar nova janela toda vez que o usuario clica no botão ?
Grato,
Postar um comentário