Gerador de Glade Loaders para Python
Quando estou fazendo programa com gui usando Python + GTK, depois de desenhar a interface no Glade tenho de escrever o carregador, que é uma tarefa bem monótona. Daí escrevi uma utilitariozinho em Python que parseia um arquivo Glade e gera um script python para carregá-lo, associando widgets à variáveis e sinais à funções callback.
Fiz essa tela para um exemplo:
O arquivo originário é exemplo.glade, o nome da janela é janelaExemplo, os nomes das caixas de texto são nomeEntry e emailEntry, e o botão, chamado botao, ao receber um evento clicked chamará a função callback botao_pressionado.
Para gerar o código carregador basta passa o arquivo glade para o gladeloader.py e redirecionar a saída para um arquivo. Assim:
./gladeloader.py exemplo.glade > exemplo.py
Eis o exemplo.py gerado:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import sys
try:
import pygtk
pygtk.require('2.0')
import gtk
import gtk.glade
except:
sys.exit(1)
class appWindow:
def __init__(self):
self.widgetTree = gtk.glade.XML('exemplo.glade')
#Get the Main Window, and connect the 'destroy' event
self.window = self.widgetTree.get_widget('janelaExemplo')
if (self.window):
self.window.connect('destroy', gtk.main_quit)
#Widgets -------
self.emailEntry = self.widgetTree.get_widget('emailEntry')
self.nomeEntry = self.widgetTree.get_widget('nomeEntry')
#Autoconnect Signals and Callbacks
self.widgetTree.signal_autoconnect(self)
self.window.show_all()
# Callbacks ---------------------------------------------------------------
def botao_pressionado(self, widget):
print 'botao_pressionado'
if __name__ == '__main__':
app = appWindow()
gtk.main()
Como deu pra perceber é um utilitário bem simples, não espere que ele escreva seu código, ele dá apenas ajuda a dar aquele pontapé inicial e espantar a preguiça.
Arquivos:
Update: colocar código-fonte no wordpress é um saco. Muito mesmo.







Muito bom…… Exelente mesmo…
Agora só me diz uma coisa… Ele gera os CallBacks sozinho também?
Se for isso, e eu entendi bem, pra pequenas aplicações, o programador precisa mecher apenas nas callbacks, correto?
[]’s
Danilo
Sim, os callbacks são gerados com o mesmo nome que você dá no Glade, pra funcionar com o signal_autoconnect. Eles são preenchidos com um “print ‘nomedocallback’”. Como nesse trecho:
def botao_pressionado(self, widget):
print ‘botao_pressionado’
…que é derivado dessa parte do arquivo Glade:
True
Botão
Oi Marcelo. Fiz pouca coisa gráfica (usando gtk) com python. Você conhece o tepache?
Uns projetos eu fiz com o tepache, outros, até o glade dispensei. Mas que é chato escrever tudo, é mesmo
Valeu pela dica, não sabia sobre o Tepache e me pareceu bem completo.
O site deles tava fora do ar, mas achei esse tutorial:
http://www.async.com.br/~kiko/pygtk-web/articles/bitpodder/BitPodder.htm
E acabei de achar o código aqui:
http://wiki.laptop.org/go/Tepache
Fala ae Marcelo…
Interessante o Tepache, pois o mesmo tem pacote para Ubuntu.
O legal é que ele separa as Windows em classes e tals, gera as actions, mas a limitação é que ele não guarda os widgets como o gladeloader….
Olá Marcelo,
eu usei tepache algumas vezes, mas não gosto da classe SimpleGladeApp.py que ele usa, o seu código é bem mais legal, tá me poupando bastante trabalho.
Tomei a liberdade de modificar um pouco o código para ao invés de imprimir gerar um arquivo “.py” e resolvi empacotá-lo em .deb para instalar no ubuntu dos pcs da faculdade.
o codigo modificado tá aqui:
http://nacaolivre.org/disco/enviados/gladeloader
e o pacote tá aqui:
http://nacaolivre.org/disco/enviados/gladeloader.deb
PS.: não coloquei o header de GPL, deixo por sua conta modificar o código caso não tenha gostado da função que fiz. Ficarei por conta de reempacotar. O que acha?
Abraço!
Olá Gabriel,
ótimo saber que o código está sendo útil. Pode ficar à vontade.
Agora estou correndo um pouco, mas vou dar uma olhada no seu código e então integrá-lo.
Valeu.
Marcelo, dá uma olhada neste meu post sobre códigos no WP. Espero que ajude! Abraço!
http://simplesideias.com.br/wp-coders/
Olá Nando, dei uma olhada no teu código, mas infelizmente não posso pôr em prática porque não sou eu quem me hosteio. Mas se um dia acontecer pode crer que levo junto teu código.
Valeu.
Vale a pena dar uma olhada no Kiwi: é um framework para PyGTK baseado na arquitetura MVC que, dentre outras coisas, apresenta alguns recursos muito legais para se trabalhar com arquivos Glade. Também oferece um conjunto de widgets adicionais, constrúidos sobre widgets do GTK; que oferecem validação, facilidades para atuarem como proxies etc.
Mais sobre o Kiwi: http://www.async.com.br/projects/kiwi/
Um “Hello World”: http://www.async.com.br/projects/kiwi/howto/person.html
Existe algum gerador que transforme um arquivo glade em código python em tempo de compilação? Ou seja, que gere um código em python que não precise do libglade instalado para ser executado…
Procurando, achei o glc (http://glc.sourceforge.net/) e o gladepyc (http://www.fcoutant.freesurf.fr/gladepyc.html), mas ambos estão desatualizados e/ou não são mais mantidos.
Valeu.
Oi Edisson, foi mal a demora, semana complicada e tals.
Bem, geração de código é uma coisa tida como obsoleta, gera mais problemas que soluções, além disso ter as interfaces no XML do Glade não gera problema de dependências, já que toda instalação de GTK+ vem com a libglade.
Por outro lado se você precisa de um controle maior sobre a interface codá-la na mão é a melhor pedida, mas ainda assim não recomendo geração automática, a não ser pra tirar dúvidas, aí você pode usar o Glade-2 pra gerar código C e daí escrever (você mesmo) o código PyGTK.
É isso. Fazendo meu jabá tem um artigo sobre uso do glade no site do CInLUG:
Mantendo a Sanidade com o Glade
http://www.cin.ufpe.br/~cinlug/wiki/index.php/Mantendo_A_Sanidade_Com_O_Glade
Inté.
Opa cara, achei seu gerador muito interessante, facilita bastante, só que estou com um problema, se eu tiver mais de uma janela no arquivo.glade ele não funciona muito bem, bora trocar umas idéias pra ver se a gente resolve isso ai. Qualquer coisa manda um email.
Oi fenrrir,
brigado pelo interesse, apesar de no momento não poder brincar muito com o gladeloader, acabei de mudar o código pro svn do google. Facilita caso consiga tempo pra mexer numa coisa ou noutra, e também se vc quiser mandar algum aprimoramento.