Documente Academic
Documente Profesional
Documente Cultură
1 de 15
Descargar Gratis
easypdfcombine.com/Combinar_PDF
Por Admin
http://www.somoslibres.org/modules.php?name=News&file=article&s...
Comienza Descargar
internetspeedtracker.com/bandwidth
Objetivos:
Conocer las tecnicas basicas de programacion de GUIS
Comprender cada uno de los metodos y parametros usados por wxPython
Servir de base para el desarrollo de nuestras propias aplicaciones
Temas:
La creacion de un programa con interfaz de usuario grafica GUI
Creacion de widgets
Incorporacion de widgets en los contenedores
Vincular y manipular eventos
Manipular los valores de los widgets
El documento esta escrito de manera lineal y con la informacion estrictamente necesaria para
comprender lo que se prentende ensear, se explica paso a paso y de manera incremental la creacion de
un pequea aplicacion detallando los aspectos necesarios para la comprension sin abundar en detalles
11/06/2016 19:45
2 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
que puedan resultar confusos, luego el lector podra profundizar en los conceptos necesarios, para ello al
final del documento se sugiere lectura relacionada.
Vamos a usar para corroborar el correcto funcionamiento el manejo de excpciones de python mediante
try y except, intenta importar el modulo, si la importacion no da errores continua, en caso de producirse
un error lanza una excepcion y muestra un mensaje de error.
Paso 3: El constructor
Un GUI es una jerarqua de objetos, un botn puede estar contenido en un panel que figura en una
solapa que es contenido en una ventana, etc.
Por lo tanto, cada elemento grfico tiene un padre (su contenedor, por lo general). Por lo tanto tambien
tiene un constructor padre (parent) como parmetro. Hacer un seguimiento de los padres es muy til
cuando tenemos que mostrar/ocultar un grupos de widgets, redibujar la pantalla o simplemente
destruirlas cuando la aplicacin termina. Asi, simpleapp_wx hereda de wx.Frame, por lo que tenemos
que llamar al constructor wx.Frame (wx.Frame.__init__ ()).
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
El objeto wx.Frame tiene dos parmetros: id (identificador del widget) y title (el ttulo de la ventana).
11/06/2016 19:45
3 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
11/06/2016 19:45
4 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
Ya estamos en condiciones de ejecutar nuestro programa y ver el primer resultado, yo programo desde
VIM, por lo que hago lo siguiente, :w para grabar, luego :!python % para ejecutar el interprete y pasarle
como parametro el archivo que actualemente se encuentra en el buffer. Si usa otro editor grabe el
programa y desde linea de comandos cambiele los permisos para hacerlo ejecutable por el dueo con:
chmod u+x programa.py
Podremos ver nuestro programa en accion, por una parte es estimulante ver una ventana en modo
11/06/2016 19:45
5 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
grafico con todos los botones y el aspecto identico al resto de nuestras ventans, pero por otra parte es
decepcionante ver la ventana vacia, por lo que en los proximos pasos iremos poblandola con widgets.
Agregar el widget
Ahora, lo agregaremos a nuestros gestor de diseo (GridBagSizer).
Llamamos al metodo .Add() de nuestra grilla, le pasamos el widget que acaba de crear (self.entrada) y
sus coordenadas de ubicacion en la grilla (0,0) y (1,1) que es el espaciado alrededor del widget. En
11/06/2016 19:45
6 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
nuestro caso, el widget no se extienden a varias celdas, wx.EXPAND le dice al gestor de diseo (grilla)
que debe ampliar la entrada de texto si su celda es redimencionada.
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:")
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
self.SetSizerAndFit(grilla)
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
Tenemos una ventana con un solo campo de texto. Usted puede incluso ingresar en algn texto por
teclado. Pero tenemos un problema, el campo de texto no cambia de tamao cuando redimenciono la
ventana. No se preocupe, hay una buena razn para esto, le dijimos al campo de entrada de texto que
debia redimensionarse automticamente si su columna o celda se expande, pero an no le
especificamos al gestor de diseo (grilla) que cuando la ventana se redimensiona tambien lo debe hacer
la grilla. Ya veremos como hacerlo mas adelante.
Observe como ubicamos el nuevo widget, el boton, usando las coordenadas (0,1) sin espaciado. En este
punto tenemos una ventana con un campo de texto y un botn.
11/06/2016 19:45
7 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
Ya tenemos tres widgets en nuestra aplicacion, todavia no hacen nada ni se ven bien cuando
redimensionamos la ventana, pero seguiremos mejorando nuestro programa.
11/06/2016 19:45
8 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:")
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
self.etiqueta = wx.StaticText(self,-1,label=u'Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.WHITE)
grilla.Add( self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
Ahora intente cambiar el tamao de la ventana. El campo de texto y la etiqueta azul ahora cambian de
tamao correctamente para adaptarse al tamao de la ventana. Pero no se ve tan bien cuando
redimensionamos la ventana verticalmente.
11/06/2016 19:45
9 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:")
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
self.etiqueta = wx.StaticText(self,-1,label=u'Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.WHITE)
grilla.Add( self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.SetSizeHints(-1,self.GetSize().y,-1,self.GetSize().y );
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
11/06/2016 19:45
10 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:", style=wx.TE_PROCESS_ENTER)
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
self.entrada.Bind(wx.EVT_TEXT_ENTER, self.SiPulsaEnter)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
boton.Bind (wx.EVT_BUTTON, self.SiCliqueaBoton)
self.etiqueta = wx.StaticText(self,-1,label=u'Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.WHITE)
grilla.Add(self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.SetSizeHints(-1,self.GetSize().y,-1,self.GetSize().y )
self.Show(True)
def SiCliqueaBoton(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() +
"Cliqueo el boton!")
def SiPulsaEnter(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Pulso enter!")
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
11/06/2016 19:45
11 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:", style=wx.TE_PROCESS_ENTER)
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
self.entrada.Bind(wx.EVT_TEXT_ENTER, self.SiPulsaEnter)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
boton.Bind (wx.EVT_BUTTON, self.SiCliqueaBoton)
self.etiqueta = wx.StaticText(self,-1,label=u'Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.WHITE)
grilla.Add(self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.SetSizeHints(-1,self.GetSize().y,-1,self.GetSize().y )
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
self.Show(True)
def SiCliqueaBoton(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() +
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
"Cliqueo el boton!")
def SiPulsaEnter(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Pulso enter!")
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
Conclusiones
Bueno, eso es todo, espero que les sirva, si encuentran errores por favor me avisan asi lo corrijo. El
documento es de libre distribucion, solo me gustaria que se mantenga la autoria, pero, si no lo quiere
hacer tambien esta bien, la unica motivacion es compartir conocimientos.
Si quieren profundizar en el uso de wxPython recomiendo los siguientes enlaces:
http://www.wxpython.org/onlinedocs.php (http://www.wxpython.org
/onlinedocs.php)
http://wiki.wxpython.org/ (http://wiki.wxpython.org/)
http://boa-constructor.sourceforge.net/ (http://boa-constructor.sourceforge.net/)
11/06/2016 19:45
12 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
Para contactarme:
lwayar@retronet.com.ar (mailto:lwayar@retronet.com.ar)
http://www.retronet.com.ar (http://www.retronet.com.ar)
Descargar Gratis
Traduzca, Convierta PDFs y Ms. Descubra Gratis EasyPDFCombine!
Tema Relacionado: Documentacin y Manuales (modules.php?name=News&new_topic=10)
11/06/2016 19:45
13 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
sid=7356) 2016-06-10
Aumenta la demanda de profesionales expertos en software libre y cdigo abierto (modules.php?name=News&
file=article&sid=7355) 2016-06-09
Disponible Manjaro Linux 16.06 (modules.php?name=News&file=article&sid=7354) 2016-06-08
Debian 7 Wheezy con soporte para Armel y ARMhf (modules.php?name=News&file=article&sid=7353)
2016-06-07
Cmo se vende software libre (modules.php?name=News&file=article&sid=7352) 2016-06-07
Linux AIO Ubuntu 16.04 (modules.php?name=News&file=article&sid=7351) 2016-06-06
Linux 4.7 RC2 (modules.php?name=News&file=article&sid=7350) 2016-06-06
OpenSwitch ahora es un proyecto de la Linux Foundation (modules.php?name=News&file=article&sid=7349)
2016-06-03
Disponible Linux Mint 18 (modules.php?name=News&file=article&sid=7348) 2016-06-03
Alpine Linux 3.4 mejora el soporte para Raspberry Pi (modules.php?name=News&file=article&sid=7347)
2016-06-03
Linux Foundation abre la convocatoria para Becas (modules.php?name=News&file=article&sid=7346)
2016-06-03
Madrid, capital del open source y software libre (modules.php?name=News&file=article&sid=7345) 2016-06-02
Oracle advierte: "La victoria de Google sobre Java podra matar la GPL" (modules.php?name=News&file=article&
sid=7344) 2016-06-02
NOTICIAS RELACIONADAS
sid=5497)
Libros y Magazines en el Centro de Software de Ubuntu (modules.php?name=News&file=article&sid=4989)
11/06/2016 19:45
14 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
Buscar (http://www.somoslibres.org/modules.php?name=Search)
Contacto (http://www.somoslibres.org/modules.php?name=Feedback)
Tu Cuenta (http://www.somoslibres.org/modules.php?name=Your_Account)
Proyectos:
Debian (http://www.somoslibres.org/modules.php?name=News&new_topic=4)
GNU/Linux (http://www.somoslibres.org/modules.php?name=News&new_topic=13)
Ubuntu (http://www.somoslibres.org/modules.php?name=News&new_topic=32)
Fedora (http://www.somoslibres.org/modules.php?name=News&new_topic=24)
Gnome (http://www.somoslibres.org/modules.php?name=News&new_topic=2)
KDE (http://www.somoslibres.org/modules.php?name=News&new_topic=12)
Suse (http://www.somoslibres.org/modules.php?name=News&new_topic=16)
Slackware (http://www.somoslibres.org/modules.php?name=News&new_topic=35)
RedHat (http://www.somoslibres.org/modules.php?name=News&new_topic=6)
Mono (http://www.somoslibres.org/modules.php?name=News&new_topic=15)
TumiX (http://www.somoslibres.org/modules.php?name=News&new_topic=34)
GNU (http://www.somoslibres.org/modules.php?name=News&new_topic=7)
Puedes sindicar nuestros titulares en
(http://www.somoslibres.org/backend.php)
1999 - 2011 GUSL (http://www.somoslibres.org/) Es una produccin de SurNoticias.com
(http://www.surnoticias.com) DY (http://somoslibres.org/html.php?op=danielyucra.html)
Grupo de Usuarios de Software Libre - SomosLibres.org - Per 1999 - 2011 GUSL
Informes y Contacto:
(http://www.somoslibres.org/modules.php?name=Feedback) admin "at" somoslibres . org
>Noticias Tecnolgicas (http://www.surnoticias.com/index.php/technology)
11/06/2016 19:45
15 de 15
http://www.somoslibres.org/modules.php?name=News&file=article&s...
11/06/2016 19:45