Gerador de Glade Loaders para Python

2007 Janeiro 23
by Marcelo Lira

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:

Exemplo de GUI

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.

15 Respostas leave one →
  1. 2007 Janeiro 25

    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

  2. 2007 Janeiro 25

    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

  3. 2007 Janeiro 29

    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 :)

  4. 2007 Janeiro 29

    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

  5. 2007 Fevereiro 1

    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….

  6. 2007 Março 5

    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!

  7. 2007 Março 5

    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. :)

  8. 2007 Março 18

    Marcelo, dá uma olhada neste meu post sobre códigos no WP. Espero que ajude! Abraço!

    http://simplesideias.com.br/wp-coders/

  9. 2007 Março 18

    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.

  10. 2007 Março 18
    Porcho permalink

    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

  11. 2007 Abril 19
    Edisson Jr. permalink

    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.

  12. 2007 Abril 21

    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é.

  13. 2007 Julho 3

    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.

  14. 2007 Julho 3

    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. :)

Trackbacks & Pingbacks

  1. Nação Livre » Blog Archive » Personalizando o Gnome - Parte 1: Nautilus-Actions

Deixe uma resposta

Note: You can use basic XHTML in your comments. Your email address will never be published.

Assine o feed destes comentários via RSS