Sie sind auf Seite 1von 64

Python y wxPython, ¡hoy hará Sol!

Ángel Luis García García


Un murciano que sabe algo de
Python...
● ¿Quién soy? Ángel Luis
● UMU: Ing. Técnico Inf. Gestión
● Trabajo: 2004-2010
– AngelPlus (VB 6.0)
– AMC (PB 6.5)
– Andamur (PB 6.5)
– MARNYS (Python 2.5.4, Crystal)
– Academia P. de Lema (Ofimática)
– Proyectos personales (VB/PB/Python)...
(algunos sin cobrar...)
● Programación (no web), bases de datos, mantenimiento
de sistemas (servidores, datáfonos, PC's), formación
SEPTIEMBRE 2009
...una revelación,

Python me encontró...
Y desde entonces... hasta hoy

El Viaje del Navegante


(http://elviajedelnavegante.blogspot.com/)
(ReportLab, XML, wxPython, IronPython, MySQL, etc)
¿Por qué Python es bueno para mí?
● Sintaxis sencilla. ● Multitud de módulos
(web, móviles, escritorio,
● Fácil de aprender. SOAP, etc).
● Multiplataforma (Unix, ● Ampliable mediante C
Mac, Windows). y C++.
● Multiparadigma ● Respaldado por
(imperativo, funcional, Google, Facebook,
OO) [se pueden mezclar entre ellos] NASA, etc.
● Amplia documentación ● Tengo el Síndrome de
la Cadena “chorizo”
Cadenas chorizo...
Python: Historia

● Creado por Guido van Rossum (el benevolente


dictador vitalicio) a finales de los 80.
http://www.python.org/~guido/
– Desde 2005, en Google (Mountain View).
– Fija directrices y decisiones finales sobre
Python.
● Administrado por PSF (Python Software
Foundation), con licencia de código abierto (PSFL)
compatible con GPL de GNU a partir de versión
2.1.1.
● Sitio web oficial: www.python.org
Implementaciones de Python

● CPython: (o Python) Implementación de referencia. Compila,


interpreta y contiene módulos codificados en C estándar.
● Jython: Implementación para la JVM (Máquina Virtual Java)
accediendo a las bibliotecas de Java.
● IronPython: Implementación para el CRL de Microsoft, para
acceder al framework de .NET.
● PyPy: Implementación de Python escrita en Python (para rizar
más el rizo).
Python.... ¿versión 2.XX ó 3.XX?

● Ayuda para elegir entre 2.XX y 3.XX:


http://wiki.python.org/moin/Python2orPython3
● Tres versiones a Diciembre 2010:
– Python 2.6 (estable)
– Python 2.7 (estable)
– Python 3.2 (desarrollo)
● ¿Cuál elegir? Depende de nuestras exigencias.
– ¿Qué modulos necesitamos? Mayoría compatibles con 2.6
– ¿Futuro? 2.XX es incompatible con 3.XX
– Mayoría de frameworks funcionan con 2.XX (Django, PIL, etc)
Mi recomendación de versión Python
El futuro de Python
● Artículo: http://blog.apsl.net/2010/07/29/va-a-desaparecer-python/
● Lenguaje de propósito general, con más de 20 años de vida.
● Esponsorizado el desarrollo por Google.
● Utilizado en Industrial Light & Magic, Pixar, BitTorrent, U.S.
National Weather Service, NASA, NSA, Fermi, Corel, Red Hat,
Lockheed Martin, Facebook, etc.
● Conferencias anuales mundiales (PyCon).
● Multitud de módulos (librerías), ampliable.
● Utilizado en programación de sistemas, cálculo numérico, web,
móviles (Android, Symbian), máquinas virtuales Java y .NET, etc.
● Casos de éxito: Google App Engine (entorno de Cloud Computing de Google,
que soporta Java y Python). Más en http://www.python.org/about/success/
Comenzamos....
Python: Conceptos generales
● Lenguaje de programación de uso general.
● De muy alto nivel ó VHLL (Very high-level programming language)
– Alto nivel de abstracción (uso de listas, tuplas, diccionarios ó tablas
hashing).
● Multiplataforma (Linux, Mac, Windows)
● Multiparadigma (imperativo, orientado a objetos y funcional)
● Interpretado, dinámico, fuertemente tipado, gestión de memoria
● Python: Lenguaje + biblioteca estándar + módulos de extensión
– Lenguaje: Estructuras, palabras reservadas, funciones genéricas, etc.
Ej: print, if... else..., def ():.
– Biblioteca estándar: Conjunto de módulos por defecto en la
distribución. Ej: os, cPickle, datetime.
– Módulos de extensión: componentes extra. Ej: acceso a bases de datos,
XML, YAML, entorno gráfico, web.
Instalación de Python
● De serie en la mayoría de distros Linux
● Para Windows y Mac, www.python.org

● Se instala:
– Intérprete Python (intérprete + compilador cuando sea necesario)
– IDLE: IDE escrito en Tkinter
– Documentación módulos instalados
– Manual Python
El intérprete de Python
Mini tutorial: funciones y clases
Mini tutorial: funciones y clases
Mini tutorial: Control de flujo
Mini tutorial: Tipos de datos
● Números
● Secuencias
– Mutables
● Listas
– Inmutables
● Tuplas
● Cadenas
● Diccionarios
● Conjuntos
LISTAS: ¡¡¡Todo potencia!!!
● Instanciación:
– a = []
– a = ['Odio el Hola Mundo',OBJECT]
– a = ['Ángel Luis','García','García',32,[18,5,1978]]
● Acceso:
– a[0] devuelve 'Ángel Luis'
– a[3] devuelve 32
– a[4][1] devuelve 5
– for i in a: i....
● Métodos: len(x), count(x), index(x), append(x), remove(x), etc.
TUPLAS: Listas inmutables

● Instanciación:
– a = ()
– a = ('Hola Lan Party', 2010)
– a = (OBJECT, [], (243,343))
● Acceso:
– a[2] devuelve tupla (243, 343)
● Métodos: count(x), index(x)
DICCIONARIOS: Tablas hashing
● Instanciación:
– a = {}
– a = {'clave1':valorX, 'clave2':valorY}
– a = {'angel':32, 'emilia':32, 200:'Python' }
● LAS CLAVES SON UNÍVOCAS
● Acceso:
– a['angel'] devuelve 32
– a[200] devuelve 'Python'
– Mediante iteradores...
● Métodos: len(x), has_key(k), del(d['x']), etc.
Conversiones entre listas, tuplas y
diccionarios
● Sea:
– l = ['Lan Party', 2010]
– t = ('Odio el Hola Mundo', 'Desde siempre')
– u = [(1, 'Python'),(2,'wxPython')]
– d = {1:'XML', 2:'IronPython', 3:'ReportLab'}
● Conversiones:
– c1 = tuple(l) c1 = ('Lan Party', 2010)
– c2 = list(t) c2 = ['Odio el Hola Mundo', 'Desde siempre']
– c3 = dict(u) c3 = {1: 'Python', 2: 'wxPython'}
– c4 = d.items() c4 = [(1, 'XML'), (2, 'IronPython'), (3, 'ReportLab')]
– c5 = d.keys() c5 = [1, 2, 3]
– c6 = d.values() c6 = ['XML', 'IronPython', 'ReportLab']
Más de funciones... parámetros
Más de OO... herencia
Más cosas importantes de OO y
funciones... que veremos otro día...
● OO
– Herencia múltiple y MRO
– Emular polimorfismo (sobrecarga de métodos).
– Métodos especiales (__dict__, __all__, etc)
– Metaclases
● Funciones
– Paso de parámetros: listas y diccionarios.
– Atributos de función.
– Lambda, yield, etc.
Más cosas importantes... que
veremos otro día....
● Iteradores.
● Expresiones regulares (módulo re).
● Comprensión de listas.
● Funciones decoradoras.
● Entrada/salida (file y los módulos os, codecs).
● Interacción con el sistema (módulos sys, os).
● Manejador de excepciones (try/except/finally).
● Codificación (sitecustomize, utf-8, decode/encode)
● Formateo cadenas (%s, %d, etc)
Ejemplo: Imports, persistencia y
otras hierbas, en Python
● Aplicación sencilla de registro de persona (cargar,
guardar, modificar).
● Creación de módulos, ¡¡¡cada cosa en su sitio!!!
– clases_base.py: Entidades.
– persistencia.py: Persistencia de datos.
– clases_aplicacion.py: Lógica de negocio adaptada.
– principal.py: Aplicación.
Ficheros generados
Al “compilar” principal.py

Ficheros compilados pyc


Ejecutando...
from modulo import *
Segunda parte....

Are you ready?


El framework wxPython
● Creado por Robin Dunn, en 1995.
● Es una librería gráfica para Python.
● Permite crear programas con una interfaz gráfica robusta y de
gran funcionalidad, fácil y simple.
● Es un wrapper de la plataforma wxWidgets (escrita en C++).
(Una adaptación de la biblioteca wxWidgets para ser usada en Python)
● Es Open Source. The only reason
wxPython isn't the
● Multiplataforma (Windows, Unix, Mac). standard Python GUI
toolkit is that Tkinter
● Muy documentado. was there first.
● Proyecto muy activo. (19/10/2010 wxPython 2.9.1.1) Guido van Rossum
● www.wxpython.org (software y documentación)
El framework wxPython

● Versiones a Diciembre 2010 (para Python 2.5, 2.6 y 2.7):


– Estable: 2.8.11.0
– Desarrollo: 2.9.1.1
● Conocimientos previos para utilizar wxPython:
– Sintáxis y estucturas fundamentales de Python.
– Programación orientada a objetos.
● ¿Por qué? Se utilizan clases, se heredan
componentes y se hace override en sus métodos y
atributos.
¿Cómo funciona una aplicación
wxPython?
● wxPython sirve para crear aplicaciones gráficas
orientadas a eventos.
● A cada evento se le puede asociar un código,
mediante un proceso llamado binding.
● El manejador de eventos es el código que se
dispara a consecuencia de la generación de un
evento.
● Una aplicación wxPython espera a que se generen
eventos, asociando los mismos a un código,
llamado manejador de eventos.
Estructura de una aplicación
wxPython
● Una aplicación wxPython se divide en tres partes:
– Importar el módulo wx (y demás cosas...)
– Creación de la aplicación wxPython.
– Creación del contenedor.
● Componentes.
● Binding.
● Manejadores de eventos.
Creación de una aplicación
wxPython
Creación de una aplicación
wxPython
Binding y manejadores de eventos
Binding y manejadores de eventos

Y al hacer click en el botón


¿Dónde está la documentación de
wxPython? ¿Frame? ¿ein?
Documentación obligatoria

● wxPython Demo

● WxWidgets Reference

● Google
Sizers
● Los widgets pueden disponerse con wx.Point y wx.Size,
mediante coordenadas.
● Sizer: Mecanismo de disposición de widgets en wxPython.
– Maneja el tamaño y posición de sus widgets, basado en
un conjunto de reglas.
– Se asigna a un contenedor (wx.Panel ó wx.Frame).
– Es un algoritmo para disponer ó enmarcar un grupo de
widgets.
– Los subwidgets que se crean dentro de un contenedor
deben de añadirse por separado al sizer.
– El sizer administra la posición de los widgets.
Sizers
● Un sizer en wxPython es un objeto con el único
propósito de administrar el posicionamiento de un
conjunto de widgets dentro de un contenedor.
● El sizer es la representación de un algoritmo de
posicionamiento de pantalla (no un contenedor ó
widget).
● Un sizer es una instancia de la clase wx.Sizer.
● Un sizer puede estar incluido en otro sizer.
Sizers

● Tipos de sizers:
– wx.BoxSizer
– wx.FlexGridSizer
– wx.GridSizer
– wx.GridBagSizer
– wx.StaticBoxSizer
● Los más importantes:
– wx.BoxSizer y wx.FlexGridSizer
Sizers
● Aprender a utilizar sizers manualmente es:
– UNA LOCURA
● ¿Alguna solución?
– Utilizar aplicaciones de diseño de
pantallas con generación automática
de código Python y wxPython.
● wxGlade

● wxFormBuilder

● wxDesigner
wxFormBuilder
● Entorno WYSIWYG para diseño gráfico de interfaces
para wxWidgets.
● Posibilidad de generar código Python.
● Contiene muchos widgets.
● Trabajar con sizers en wxFormBuilder es muy fácil.
● http://wxformbuilder.org/
● Tutorial: wxFormBuilder en El Viaje del Navegante
Cosas que veremos otro día...

● Widgets más comunes.


● Menús.
● Widgets avanzados.
● MVC en wxPython.
● Imágenes.
● Impresión.
● Los controles Grid y Tree.
● ....y un largo etcétera.
Ejemplos completos de wxPython

● Interfaz gráfica de gestión de usuarios.

● Editor de texto.

● Combobox y paso de parámetros entre widgets.

● pyLorca, creación automática de clases.


Anexo I: IDE's, editores y GUI's para Python
IDE con GUI integrado:
BOA Constructor, SharpDevelop

IDE:
IDLE, NetBeans, Stani's Python Editor, PyScripter, Geany,
Pyragua,Wingware Python IDE, PythonWin

GUI:
wxGlade, wxFormBuilder

Editor:
Editra, Notepad++, Jedit, Gedit, BlueFish, SciTE

Shell interactivo:
Dreampie

Más herramientas aquí.


Anexo II: Recursos documentales en la red
http://pyspanishdoc.sourceforge.net/
http://python.org.ar/pyar/
http://www.freetechbooks.com/python-f6.html
http://www.digilife.be/quickreferences/quickrefs.htm
http://rgruet.free.fr/
http://planet.python.org/
http://pypi.python.org/pypi?:action=index
http://python.alltop.com/
http://ironpython-urls.blogspot.com/
http://www.cheat-sheets.org/
http://www.portablepython.com/
http://diveintopython3.org/table-of-contents.html
http://www.gaudisite.nl/PythonLinks.html
http://code.activestate.com/recipes/langs/python/
http://revista.python.org.ar/
http://www.ferg.org/
http://effbot.org/tkinterbook/
http://wiki.python.org/moin/SpanishLanguage
http://www.java2s.com/
http://xoomer.virgilio.it/infinity77/index.html
http://www.andypatterns.com/
Anexo III: Libros de Python, en español
● PYTHON GUÍA DE REFERENCIA
– ALEX MARTELLI
– EDITORIAL O'REILLY
● PROGRAMACIÓN PYTHON 3
– MARK SUMMERFIELD
– EDITORIAL ADDISON WESLEY
● PYTHON, CREAR – MODIFICAR – REUTILIZAR
– JIM KNOWLTON
– EDITORIAL WROX
● LA GUÍA DEFINITIVA DE DJANGO
– ADRIAN HOLOVATY Y JACOB KAPLAN-MOSS
– EDITORIAL APRESS
El secreto para aprender Python y
wxPython...

Buscar, encontrar,
modificar, probar y
ver porqué no
funciona.
¡Muchas gracias a todos!