Artículos de Python + Glade en Español

Para aquell@s gentes que están incursionando en el mundo de la programación, el lenguaje Python es ideal para aprender. Y es normal que las primeras cosas que se quieran hacer sean ventanas con botones, menúes y demás. GTK es una librería que permite hacer eso para varias plataformas, como Windows, Linux, Solaris y Mac OSX (con problemas de integración, pero funciona). Por último, Glade es un programa que sirve para crear las ventanas+botones+menúes+etc. de forma gráfica, «dibujando», arrastrando y pegando componentes en una suerte de «vista de diseño» (al mejor estilo Visual Basic o Delphi).

LearningPython.com es un sitio en idioma inglés donde hay tutoriales varios sobre este lenguaje, aquí les dejo un blog donde hay artículos traducidos al castellano de Python + GTK + Glade.

Parte 1: Creando una GUI usando PyGTK y Glade
Parte 2: Construyendo una aplicación con PyGTK y Glade
Parte 3:Extendiendo nuestra aplicación PyGTK

Saludos!
Marcelo


Comentarios

5 respuestas a «Artículos de Python + Glade en Español»

  1. Avatar de Lord Taran
    Lord Taran

    No soy precisamente un experto en Glade ni en gtk, y mientras aprendo estoy traduciendo, pues así llego más a fondo, o eso me parece a mi. Por supuesto tampoco soy precisamente un traductor profesional… Así que es más que probable que encontréis fallos en las traducciones.
    Si fuera así agradecería que me las notificarais.

  2. Avatar de Marcelo
    Marcelo

    Sólo para decirte que te felicito por el trabajito que te tomaste. 😀

    Marcelo

  3. Avatar de Lord Taran
    Lord Taran

    Solo hace falta que le sirva a alguien y no sólo a mi, y pulirlo claro 😉
    Por cierto, gracias a tu referencia he conocido y agregado a mi blogroll Codear.com, muy interesante!

  4. Avatar de Pilar

    Hola, no sé si me podeis ayudar con esto de python y glade.
    Estoy intentando integrar unas ventanas hechas con glade en inkscape, en la parte de extensiones, pero cuando muestro la ventana se queda un poco petado el inkscape, hasta que la cierro. Y el menú se queda abierto hasta que cierre la ventana de glade, evidentemente estoy haciendo algo mal, pero no sé como integrarlo para que funcione, aqui os mando mi codigo por si me podeis ayudar,llevo días con ello y no veo como arreglarlo
    #!/usr/bin/env python
    # -*- coding: UTF8 -*-

    # Python module senialUpdate.py
    # Autogenerated from senialUpdate.glade
    # Generated on Sat Mar 29 18:40:21 2008

    # Warning: Do not delete or modify comments related to context
    # They are required to keep user’s code

    try:
    import os
    import sys
    import gtk
    import gtk.glade
    except ImportError:
    print «Error importing pygtk2 and pygtk2-libglade»
    sys.exit(1)

    from xml.dom import minidom, Node
    import optparse, simplestyle, inkex, simplepath,pturtle

    import xml.xpath

    import random

    # Put your modules and data here

    # From here through main() codegen inserts/updates a class for
    # every top-level widget in the .glade file.

    class Senial(inkex.Effect):
    def __init__(self):
    inkex.Effect.__init__(self,use_minidom=True)
    self.__acels= gtk.AccelGroup()

    gladefile=»/usr/local/share/inkscape/extensions/senialUpdate.glade»
    self.windowname=»senial»
    self.wTree= gtk.glade.XML(gladefile)
    self.wTree.signal_autoconnect(self)
    self.VPrincipal= self.wTree.get_widget(«senial»)
    self.VPrincipal.show()

    dic = {«on_bAplicar_button_press_event» : self.on_bAplicar_button_press_event,
    «on_bAceptar_button_press_event» : self.on_bAceptar_button_press_event,
    «on_bCancelar_button_press_event» : self.on_bCancelar_button_press_event,
    «on_cbColorValor_changed» : self.on_changeCValor,
    «on_senial_destroy»: gtk.main_quit}
    self.wTree.signal_autoconnect(dic)

    def effect(self):

    t = pturtle.pTurtle()
    t.pu()
    t.setpos(self.view_center)
    t.pd()

    if len(self.selected)==0:
    print «Ningun elemento seleccionado»

    else:

    for id,node in self.selected.iteritems():
    self.getAttribs(node)

    #context Senial custom methods {
    #— Write your own methods here —#
    #context Senial custom methods }
    def getAttribs(self,node):
    EtiquetaText= self.wTree.get_widget(«tEtiqueta»)
    IdentText= self.wTree.get_widget(«tIdent»)
    spNumDecimalesText= self.wTree.get_widget(«spNumDecimales»)
    spTamLetraText= self.wTree.get_widget(«spTamLetra»)
    spValMaxText= self.wTree.get_widget(«spValMax»)
    spValMinText= self.wTree.get_widget(«spValMin»)
    spDistancia1Text= self.wTree.get_widget(«spDistancia1»)
    spDistancia2Text= self.wTree.get_widget(«spDistancia2»)
    cbColorNombreUniText= self.wTree.get_widget(«cbColorNombreUni»)
    cbColorValorText = self.wTree.get_widget(«cbColorValor»)

    sId=»
    sName=»
    sTag=»
    sVMax=»
    sVMin=»
    sColorDefecto=»
    sNDecimales=»
    sEstilo=»
    #if (node.nodeType == Node.ELEMENT_NODE):
    if (node.hasAttributes()):
    if (node.getAttribute(‘id’)!= None):
    sId = node.getAttribute(‘id’)
    if (node.getAttribute(‘Name’)!=None):
    sName = node.getAttribute(‘Name’)
    EtiquetaText.set_text(node.getAttribute(‘Name’))
    #node.setAttribute(‘Name’,’cambiaya’)

    if (node.attributes.getNamedItem(‘Tag’)!=None):
    sTag = node.getAttribute(‘Tag’)
    IdentText.set_text(sTag)
    if (node.attributes.getNamedItem(‘VMax’)!= None):
    sVMax = node.attributes.getNamedItem(‘VMax’).value
    spValMaxText.set_text(sVMax)
    if (node.attributes.getNamedItem(‘VMin’)!=None):
    sVMin = node.attributes.getNamedItem(‘VMin’).value
    spValMinText.set_text(sVMin)
    if (node.attributes.getNamedItem(‘ColorDefecto’)!= None):
    sColorDefecto = node.attributes.getNamedItem(‘ColorDefecto’).value
    »’
    if (sColorDefecto== «white»):
    #pos= color.get_item()
    cbColorValorText.set_active(5)
    »’
    if (node.attributes.getNamedItem(‘ColorNombreUni’)!= None):
    sColorNombreUni= node.attributes.getNamedItem(‘ColorNombreUni’).value
    #Falta por cambiar este color

    if (node.attributes.getNamedItem(‘NDecimales’)!= None):
    sNDecimales= node.attributes.getNamedItem(‘NDecimales’).value
    spNumDecimalesText.set_text(sNDecimales)
    if (node.attributes.getNamedItem(‘tamLetra’)!= None):
    sTamLetra= node.attributes.getNamedItem(‘tamLetra’).value
    ftamLetra= float(sTamLetra)
    spTamLetraText.set_value(ftamLetra)
    if (node.attributes.getNamedItem(‘style’)!= None):
    sEstilo= node.attributes.getNamedItem(‘style’)
    IdentText.set_text(‘cogido Estilo’)

    def setAttribs(self,node):
    EtiquetaText= self.wTree.get_widget(«tEtiqueta»)
    IdentText= self.wTree.get_widget(«tIdent»)
    spNumDecimalesText= self.wTree.get_widget(«spNumDecimales»)
    spTamLetraText= self.wTree.get_widget(«spTamLetra»)
    spValMaxText= self.wTree.get_widget(«spValMax»)
    spValMinText= self.wTree.get_widget(«spValMin»)

    sId=»
    sName=»
    sTag=»
    sVMax=»
    sVMin=»
    sColorDefecto=»
    sNDecimales=»
    sEstilo=»

    if node.hasAttributes():

    node.setAttributeNS(None,’Name’,’cambiaya2′)
    node.setAttribute(‘typeElement’,’tipo’)

    IdentText.set_text(node.getAttribute(‘typeElement’))

    def on_bAplicar_button_press_event(self, widget, *args):
    for id,node in self.selected.iteritems():
    self.setAttribs(node)

    def on_bAceptar_button_press_event(self, widget, *args):
    #context Senial.on_bAceptar_button_press_event {
    #print «on_bAceptar_button_press_event called with self.%s» % widget.get_name()
    #context Senial.on_bAceptar_button_press_event }
    self.setAttrib2()
    gtk.main_quit()

    def on_bCancelar_button_press_event(self, widget, *args):
    #context Senial.on_bCancelar_button_press_event {
    #print «on_bCancelar_button_press_event called with self.%s» % widget.get_name()
    gtk.main_quit()
    #self.quit()
    #context Senial.on_bCancelar_button_press_event }

    def on_changeCValor (self, widget, *args):
    s = self.wTree.get_widget(‘cbColorValor’).get_children()[0].get_text()
    print ‘color ha cambiado %s’ %s

    if __name__ == «__main__»:
    hwg= Senial()
    hwg.affect()
    gtk.main()

  5. Avatar de Marcelo
    Marcelo

    Bueno, Pilar, se me hace una duda un poco larga (y eso que estoy con poco tiempo)… te invito a que la postees en la lista de correo de Python Argentina, ahí te van (vamos?) a contestar todas las dudas que tengas al respecto. 🙂

    Saludos!
    Marcelo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *