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:

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 pensamentos sobre “Gerador de Glade Loaders para Python

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

  2. 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!

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

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

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

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

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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s