You are on page 1of 15

Escribir programas con wxPython en 15 pasos - Software Libre

1 de 15

Descargar Gratis
easypdfcombine.com/Combinar_PDF

Traduzca, Convierta PDFs y Ms.


Descubra Gratis EasyPDFCombine!

Por Admin

http://www.somoslibres.org/modules.php?name=News&file=article&s...

Download User Manuals


atozmanuals.com

Learn How To Fix Stu+ On Your Own. Use


AtoZManuals & Be An Expert!

Comienza Descargar
internetspeedtracker.com/bandwidth

Comprueba Tu Conexin y Velocidad.


Rapido con InternetSpeedTracker!

Thursday, 11 September a las 09:04:48

Escribir programas con wxPython en 15 pasos


Este Material 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 que puedan resultar
confusos, luego el lector podra profundizar en los conceptos necesarios, para ello al
final del documento se sugiere lectura relacionada.

Tutorial de wxPython - paso a paso


Escribir programas con wxPython en 15
pasos
Luis Tomas Wayar
Cada vez que aprendemos un nuevo lenguaje de programacion nos encontramos en la disyuntiva de
optar por las librerias adecuadas para cada necesidad, una de estas necesidades es la seleccion de un
conjunto de widgets para el desarrollo de la interfaz de usuario. En el caso especifico de Python las
alternativas para cubrir esta necesidad son varias. En esta serie de apuntes comenzaremos a investigar
y desarrollar breves tutoriales que mostrara algunas de estas librerias en suficiente profundidad como
para conocer las prestaciones basicas de la misma. En esta primera entrega nos referiremos a la libreria
de widgets wxPython, en entregas futuras abordaremos otras opciones como TKInter, QT, etc. Tambien se
prentende presentar una metodologia basica de programacion de interfaces de usuarios graficas e
introducir en las buenas practicas de programacion. Para ello crearemos una aplicacion sencilla donde
se pueda aplicar los conocimientos adquiridos.

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

Escribir programas con wxPython en 15 pasos - Software Libre

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.

Paso 1: Importacion del modulo


Lo primero que tenemos que hacer es importar el modulo, para poder hacerlo es importante no olvidarse
que tenemos que tener instalado tanto el interprete de python como las librerias wxPython, en Debian
la instalacion de ambos se hace con apt-get con los siguientes comandos:
apt-get install python python-wxaddons

Veamos ahora el codigo fuente de nuestro primer programa:


#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"

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 2: Creacion de una clase


Python es un lenguaje de programacion orientado a objetos, por lo tanto lo logico es que nuestra
aplicacion sea una clase, en wxPython, heredamos de wx.Frame, que es la clase base para ventanas
estndar.
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):

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

Escribir programas con wxPython en 15 pasos - Software Libre

3 de 15

http://www.somoslibres.org/modules.php?name=News&file=article&s...

Paso 4: Mantener relacion con el padre


Es una buena costumbre, cuando se realiza la construccin de cualquier tipo de componente GUI,
mantener una referencia a nuestra clase padre.
#!/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

Paso 5: Inicializacion de nuestro GUI


Usualmente es mejor tener la porcin de cdigo que crea todos los elementos GUI (botn, campos de
texto ...) separado de la lgica del programa. Es por eso que creamos el metodo initialize(). Vamos a crear
todos los widgets (botones, campo de texto, etc) en este mtodo.
En wxPython tenemos que usar self.Show(True) para forzar que la ventana se muestre en pantalla (de lo
contrario permanecera oculta).
#!/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)

Paso 6: Creacion de la clase principal


Ya tenemos un clase completamente funcional y sintacticamente correcta, vamos a usarla!
Creamos una funcion main que se ejecuta cuando el programa se invoca desde la lnea de comandos.
En wxPyhon, es obligatoria la instanciacion de un objeto wx.App () antes de la creacin de los elementos
del GUI. Por lo que hacemos app = wx.App (). Luego instanciamos nuestra clase (frame = simpleapp_wx
()). Asimismo, no le asignamos ningun padres (None), porque es el primer elemento GUI que vamos a
construir. Usamos -1 a dejar a wxPython elegir un identificador (id) propio. Y damos nuestra ventana un
ttulo: Mi aplicacion.

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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

Paso 7: Entramos en el loop


Ahora, le tenemos que decir a nuestro programa que entre en un bucle esperando eventos, esto lo
hacemos con mainloop ()
Esto significa que cada programa entra en un bucle "infinito", ya veremos que no tanto, a la espera de
eventos (ej. clic en un botn, pulsacion de una tecla, alguna accion con el raton, etc.) En wxPython el
bucle principal recibir estos eventos y los manejara en consecuencia. Esto se llama programacion
event-driven o controlada por eventos (debido a que el programa no har nada, sino esperar los eventos,
y slo reaccionara cuando se reciba uno de ellos).
#!/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')
app.MainLoop()

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

Luego invoquelo de la siguiente manera:


./programa.py

Podremos ver nuestro programa en accion, por una parte es estimulante ver una ventana en modo

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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.

Paso 8: Diseo de interfaz


Hay varias manera de incrustar widgets en una ventana (o en otro contenedor): Aadir apilados
horizontalmente, verticalmente, en una grilla, etc
Existen diferentes clases, llamadas gestores de diseo (layout managers), capaces de colocar los
widgets en los contenedores de diferentes maneras. Algunos son ms flexibles que otros. Cada
contenedor (ventana, panel, solapa, dilogo ...) puede tener su propio gestor de diseo.
Yo recomiendo el gestor de diseo grid (grilla). Se trata de una simple grilla donde se pueden incrustar
los widgets, algo parecido a una tabla con filas y columnas donde se pueden ir incroporando nuestros
elementos. Por ejemplo: Ponga un botn en la columna 2, fila 1. Ponga una casilla en la columna 5, fila
3. etc.
En wxPython, para crear el gestor de diseo del tipo grilla usamos grilla=wx.GridBagSizer() y luego le
indicamos a nuestra ventana que lo use (self.SetSizerAndFit(grilla)).
#!/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.SetSizerAndFit(grilla)
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()

Obtendremos una ventana minima que puede ser redimensionada.

Paso 9: Agregar un widget de entrada de texto


Los pasos para agregar un widget a un contenedor son dos, primero debemos definirlo para crearlo,
luego lo agregamos a un gestor de diseo, vamos por partes entonces.

Crear del widget


El objeto que vamos a crear es una netrada de texto en wxPython esa clase se lla TextCtrl y lo hacemos
asi (self.entrada=wx.TextCtrl()), pasamos como parametro self y el padre, porque nuestra ventana ser el
padre de este widget, es decir que aparecera dentro de nuestra ventana.
TextCtrl reciba dos parmetros ademas de self, -1 (para que wxPython asigne automticamente un
identificador), y el texto a mostrar (value=u"Enter text here.").
Tenga en cuenta que mantenemos una referencia a este widget en nuestra clase: self.entrada =..., esto
se debe a que tenemos que acceder a ella ms adelante, desde otros mtodos.

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

Escribir programas con wxPython en 15 pasos - Software Libre

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.

Paso 10: Agregar un nuevo widget, un boton


Muy simple, ya vimos como hacerlo, crear el botn y aadirlo. Tenga en cuenta que en este caso, no
mantenemos una referencia al botn (ya que vamos a leer ni alterar su valor en ningun momento).
#!/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.SetSizerAndFit(grilla)
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()

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

Escribir programas con wxPython en 15 pasos - Software Libre

7 de 15

http://www.somoslibres.org/modules.php?name=News&file=article&s...

Paso 11: Agregar otro widget, una etiqueta


Se trata de un StaticText en wxPython. Le pondremos coleres personalizados, usaremos un texto blanco
sobre fondo azul, tenemos que llamar dos mtodos para ello (SetForegroundColour y
SetBackgroundColour), el texto estara alineado a la izquierda por defecto, ubicamos la etiqueta en
nuestro gestor de diseo, la grilla, pero esta vez el nuevo widget se extienden a travs de dos celdas (de
modo que aparezca por debajo del campo de texto y del botn.), para ello se debe especificar un area de
(1,2), es decir una celda verticalmente, y dos celdas horizontalmente. Finalmente para la expancion de
la etiqueta usamos wx.EXPAND.
#!/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 )
self.SetSizerAndFit(grilla)
self.Show(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()

Ya tenemos tres widgets en nuestra aplicacion, todavia no hacen nada ni se ven bien cuando
redimensionamos la ventana, pero seguiremos mejorando nuestro programa.

Paso 12: Habilitar redimensionamiento


Ahora le decimos a la gestor de diseo que tiene que cambiar el tamao de sus columnas y filas cuando
la ventana es redimensionada. Slo la primera columna (0), para ello usaremos AddGrowableCol(), Tenga
en cuenta que hay otros parmetros. Por ejemplo, algunas columna pueden crecer ms que otras
cuando se cambia el tamao, eso se logra con el parmetro es de peso (En nuestro caso, simplemente se
debe poner en 1).

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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.

Paso 13: Agregar limitaciones


Vamos a aadir un contraint de modo que el usuario slo pueda modificar el tamao de la ventana
horizontalmente. En consecuencia, para impedir el cambio de tamao vertical de la ventana
especificaremos el ancho y alto mximos y mnimos de la ventana, establecemos el alto mnimo y
mximo de nuestra actual ventana (self.GetSize().y) a fin de que la ventana no se puede cambiar el
tamao verticalmente. Para ello dejamos en los valores -1 y -1 para el ancho (y) anchura de manera que
la ventana puede ser libremente redimensionada horizontalmente (-1 significa "Sin lmite").

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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

Paso 14: manejador de eventos y modificacion de atributos


Los manejadores de eventos (event handler) son mtodos que se llaman cuando algo sucede en el GUI.
Relacionamos en el manejador de eventos widgets especificos con eventos puntuales. De esta forma
decimos que es lo que tiene que hacer la aplicacion ante cualquier evento que pueda ser capturado, por
ejemplo, cuando se hace clic con raton sobre el boton o se presiona ENTER en el campo de texto.
Creamos un metodo SiCliqueaBoton(), mtodo que se llama cuando se hace clic en el botn. Tambien
creamos un metodo SiPulsamosEnter(), mtodo que se llamar luego de presionar ENTER en el campo
de texto. Observe que es necesario agregar en la entrada el parametro style=wx.TE_PROCESS_ENTER
para que este sea capaz de procesar el pulsado de la tecla enter.
En cada uno de estos metodos modificamos a su vez la etiqueta usando el metodoGetValue() para tomar
el valor actual del campo de texto y SetLabel() para establecer el nuevo valor de la etiqueta mas una
leyenda discrecional con la accion realizada.

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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

Paso 15: Fijar foco


Como ultimo agregado, haremos que el cambo de entrada de texto obtenga el foco y se seleccione el
texto contenido, para ello agregaremos tanto en el metodo initialize como en cada uno de los metodos
llamados por lo eventos un par de lineas, self.entrada.SetFocus() y self.entrada.SetSelection(-1,-1).
Veamos ahora nuestro programa terminado y lo ejecutemos para probarlo.

11/06/2016 19:45

Escribir programas con wxPython en 15 pasos - Software Libre

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

Escribir programas con wxPython en 15 pasos - Software Libre

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)

Download User Manuals


Learn How To Fix Stu+ On Your Own.
Use AtoZManuals & Be An Expert!

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

Escribir programas con wxPython en 15 pasos - Software Libre

13 de 15

http://www.somoslibres.org/modules.php?name=News&file=article&s...

Titulares en la Portada de SomosLibres.org - 2016/06/11 (http://www.somoslibres.org)


Debian GNU/Linux 9 Stretch (modules.php?name=News&file=article&sid=7357) 2016-06-10
Se consolida Cozcyt como referente nacional en software libre (modules.php?name=News&file=article&

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

Todo listo para el lanzamiento de la revista GIMP (modules.php?name=News&file=article&sid=5713)


Presentan Libro "Produciendo Animaciones con Software Libre" (modules.php?name=News&file=article&sid=5706)
Revista TINO de Cuba promueve el uso del software libre (modules.php?name=News&file=article&sid=5664)
Disponible TuxInfo 48 (modules.php?name=News&file=article&sid=5527)
El libro The Debian Administrators Handbook, disponible para descargar (modules.php?name=News&file=article&

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

Escribir programas con wxPython en 15 pasos - Software Libre

14 de 15

http://www.somoslibres.org/modules.php?name=News&file=article&s...

Aviso legal : Condiciones de


copia y distribucin Creative
Commons

Portada SomosLibres.org (http://www.somoslibres.org/index.php)

Buscar (http://www.somoslibres.org/modules.php?name=Search)

Contacto (http://www.somoslibres.org/modules.php?name=Feedback)

Enviar Noticia (http://www.somoslibres.org/modules.php?op=modload&name=Submit_News&file=index)

Tpicos del Portal (http://www.somoslibres.org/modules.php?op=modload&name=Topics&file=index)

Tu Cuenta (http://www.somoslibres.org/modules.php?name=Your_Account)

Todos los Contenidos (http://www.somoslibres.org/modules.php?name=Content)

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

Escribir programas con wxPython en 15 pasos - Software Libre

15 de 15

http://www.somoslibres.org/modules.php?name=News&file=article&s...

11/06/2016 19:45