You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Python</strong> y wx<strong>Python</strong>, <strong>¡hoy</strong> <strong>hará</strong> <strong>Sol</strong>!<br />
Ángel Luis García García
Un murciano que sabe algo de<br />
<strong>Python</strong>...<br />
● ¿Quién soy? Ángel Luis<br />
● UMU: Ing. Técnico Inf. Gestión<br />
● Trabajo: 2004-2010<br />
– AngelPlus (VB 6.0)<br />
– AMC (PB 6.5)<br />
– Andamur (PB 6.5)<br />
– MARNYS (<strong>Python</strong> 2.5.4, Crystal)<br />
– Academia P. de Lema (Ofimática)<br />
– Proyectos personales (VB/PB/<strong>Python</strong>)...<br />
(algunos sin cobrar...)<br />
● Programación (no web), bases de datos, mantenimiento<br />
de sistemas (servidores, datáfonos, PC's), formación
SEPTIEMBRE 2009<br />
...una revelación,<br />
<strong>Python</strong> me encontró...<br />
Y desde entonces... hasta hoy<br />
El Viaje del Navegante<br />
(http://elviajedelnavegante.blogspot.com/)<br />
(ReportLab, XML, wx<strong>Python</strong>, Iron<strong>Python</strong>, MySQL, etc)
¿Por qué <strong>Python</strong> es bueno para mí?<br />
● Sintaxis sencilla.<br />
● Fácil de aprender.<br />
● Multiplataforma (Unix,<br />
Mac, Windows).<br />
● Multiparadigma<br />
(imperativo, funcional,<br />
OO) [se pueden mezclar entre ellos]<br />
● Amplia documentación<br />
● Multitud de módulos<br />
(web, móviles, escritorio,<br />
SOAP, etc).<br />
● Ampliable mediante C<br />
y C++.<br />
● Respaldado por<br />
Google, Facebook,<br />
NASA, etc.<br />
● Tengo el Síndrome de<br />
la Cadena “chorizo”
Cadenas chorizo...
<strong>Python</strong>: Historia<br />
● Creado por Guido van Rossum (el benevolente<br />
dictador vitalicio) a finales de los 80.<br />
http://www.python.org/~guido/<br />
– Desde 2005, en Google (Mountain View).<br />
– Fija directrices y decisiones finales sobre<br />
<strong>Python</strong>.<br />
● Administrado por PSF (<strong>Python</strong> Software<br />
Foundation), con licencia de código abierto (PSFL ( PSFL) )<br />
compatible con GPL de GNU a partir de versión<br />
2.1.1.<br />
● Sitio web oficial: www.python.org
Implementaciones de <strong>Python</strong><br />
● C<strong>Python</strong>: (o <strong>Python</strong>) Implementación de referencia. Compila,<br />
interpreta y contiene módulos codificados en C estándar.<br />
● Jython: Implementación para la JVM (Máquina Virtual Java)<br />
accediendo a las bibliotecas de Java.<br />
● Iron<strong>Python</strong>: Implementación para el CRL de Microsoft, para<br />
acceder al framework de .NET.<br />
● PyPy: Implementación de <strong>Python</strong> escrita en <strong>Python</strong> (para rizar<br />
más el rizo).
<strong>Python</strong>.... ¿versión 2.XX ó 3.XX?<br />
● Ayuda para elegir entre 2.XX y 3.XX:<br />
http://wiki.python.org/moin/<strong>Python</strong>2or<strong>Python</strong>3<br />
● Tres versiones a Diciembre 2010:<br />
– <strong>Python</strong> 2.6 (estable)<br />
– <strong>Python</strong> 2.7 (estable)<br />
– <strong>Python</strong> 3.2 (desarrollo)<br />
● ¿Cuál elegir? Depende de nuestras exigencias.<br />
– ¿Qué modulos necesitamos? Mayoría compatibles con 2.6<br />
– ¿Futuro? 2.XX es incompatible con 3.XX<br />
– Mayoría de frameworks funcionan con 2.XX (Django, PIL, etc)
Mi recomendación de versión <strong>Python</strong>
El futuro de <strong>Python</strong><br />
● Artículo: http://blog.apsl.net/2010/07/29/va-a-desaparecer-python/<br />
● Lenguaje de propósito general, con más de 20 años de vida.<br />
● Esponsorizado el desarrollo por Google.<br />
● Utilizado en Industrial Light & Magic, Pixar, BitTorrent, U.S.<br />
National Weather Service, NASA, NSA, Fermi, Corel, Red Hat,<br />
Lockheed Martin, Facebook, etc.<br />
● Conferencias anuales mundiales (PyCon).<br />
● Multitud de módulos (librerías), ampliable.<br />
● Utilizado en programación de sistemas, cálculo numérico, web,<br />
móviles (Android, Symbian), máquinas virtuales Java y .NET, etc.<br />
● Casos de éxito: Google App Engine (entorno de Cloud Computing de Google,<br />
que soporta Java y <strong>Python</strong>). Más en http://www.python.org/about/success/
Comenzamos....
<strong>Python</strong>: Conceptos generales<br />
● Lenguaje de programación de uso general.<br />
● De muy alto nivel ó VHLL (Very high-level programming language)<br />
– Alto nivel de abstracción (uso de listas, tuplas, diccionarios ó tablas<br />
hashing).<br />
● Multiplataforma (Linux, Mac, Windows)<br />
● Multiparadigma (imperativo, orientado a objetos y funcional)<br />
● Interpretado, dinámico, fuertemente tipado, gestión de memoria<br />
● <strong>Python</strong>: Lenguaje + biblioteca estándar + módulos de extensión<br />
– Lenguaje: Estructuras, palabras reservadas, funciones genéricas, etc.<br />
Ej: print, if... else..., def ():.<br />
– Biblioteca estándar: Conjunto de módulos por defecto en la<br />
distribución. Ej: os, cPickle, datetime.<br />
– Módulos de extensión: componentes extra. Ej: acceso a bases de datos,<br />
XML, YAML, entorno gráfico, web.
Instalación de <strong>Python</strong><br />
● De serie en la mayoría de distros Linux<br />
● Para Windows y Mac, www.python.org<br />
● Se instala:<br />
– Intérprete <strong>Python</strong> (intérprete + compilador cuando sea necesario)<br />
– IDLE: IDE escrito en Tkinter<br />
– Documentación módulos instalados<br />
– Manual <strong>Python</strong>
El intérprete de <strong>Python</strong>
Mini tutorial: funciones y clases
Mini tutorial: funciones y clases
Mini tutorial: Control de flujo
Mini tutorial: Tipos de datos<br />
● Números<br />
● Secuencias<br />
– Mutables<br />
● Listas<br />
– Inmutables<br />
● Diccionarios<br />
● Conjuntos<br />
● Tuplas<br />
● Cadenas
LISTAS: ¡¡¡Todo potencia!!!<br />
● Instanciación:<br />
● Acceso:<br />
– a = []<br />
– a = ['Odio el Hola Mundo',OBJECT]<br />
– a = ['Ángel Luis','García','García',32,[18,5,1978]]<br />
– a[0] devuelve 'Ángel Luis'<br />
– a[3] devuelve 32<br />
– a[4][1] devuelve 5<br />
– for i in a: i....<br />
● Métodos: len(x), count(x), index(x), append(x), remove(x), etc.
TUPLAS: Listas inmutables<br />
● Instanciación:<br />
– a = ()<br />
● Acceso:<br />
– a = ('Hola Lan Party', 2010)<br />
– a = (OBJECT, [], (243,343))<br />
– a[2] devuelve tupla (243, 343)<br />
● Métodos: count(x), index(x)
DICCIONARIOS: Tablas hashing<br />
● Instanciación:<br />
– a = {}<br />
– a = {'clave1':valorX, 'clave2':valorY}<br />
– a = {'angel':32, 'emilia':32, 200:'<strong>Python</strong>' }<br />
● LAS CLAVES SON UNÍVOCAS<br />
● Acceso:<br />
– a['angel'] devuelve 32<br />
– a[200] devuelve '<strong>Python</strong>'<br />
– Mediante iteradores...<br />
● Métodos: len(x), has_key(k), del(d['x']), etc.
Conversiones entre listas, tuplas y<br />
diccionarios<br />
● Sea:<br />
● Conversiones:<br />
– l = ['Lan Party', 2010]<br />
– t = ('Odio el Hola Mundo', 'Desde siempre')<br />
– u = [(1, '<strong>Python</strong>'),(2,'wx<strong>Python</strong>')]<br />
– d = {1:'XML', 2:'Iron<strong>Python</strong>', 3:'ReportLab'}<br />
– c1 = tuple(l) c1 = ('Lan Party', 2010)<br />
– c2 = list(t) c2 = ['Odio el Hola Mundo', 'Desde siempre']<br />
– c3 = dict(u) c3 = {1: '<strong>Python</strong>', 2: 'wx<strong>Python</strong>'}<br />
– c4 = d.items() c4 = [(1, 'XML'), (2, 'Iron<strong>Python</strong>'), (3, 'ReportLab')]<br />
– c5 = d.keys() c5 = [1, 2, 3]<br />
– c6 = d.values() c6 = ['XML', 'Iron<strong>Python</strong>', 'ReportLab']
Más de funciones... parámetros
Más de OO... herencia
Más cosas importantes de OO y<br />
funciones... que veremos otro día...<br />
● OO<br />
– Herencia múltiple y MRO<br />
– Emular polimorfismo (sobrecarga de métodos).<br />
– Métodos especiales (__dict__, __all__, etc)<br />
– Metaclases<br />
● Funciones<br />
– Paso de parámetros: listas y diccionarios.<br />
– Atributos de función.<br />
– Lambda, yield, etc.
Más cosas importantes... que<br />
veremos otro día....<br />
● Iteradores.<br />
● Expresiones regulares (módulo re).<br />
● Comprensión de listas.<br />
● Funciones decoradoras.<br />
● Entrada/salida (file y los módulos os, codecs).<br />
● Interacción con el sistema (módulos sys, os).<br />
● Manejador de excepciones (try/except/finally).<br />
● Codificación (sitecustomize, utf-8, decode/encode)<br />
● Formateo cadenas (%s, %d, etc)
Ejemplo: Imports, persistencia y<br />
otras hierbas, en <strong>Python</strong><br />
● Aplicación sencilla de registro de persona (cargar,<br />
guardar, modificar).<br />
● Creación de módulos, ¡¡¡cada cosa en su sitio!!!<br />
– clases_base.py: Entidades.<br />
– persistencia.py: Persistencia de datos.<br />
– clases_aplicacion.py: Lógica de negocio adaptada.<br />
– principal.py: Aplicación.
Ficheros generados<br />
Al “compilar” principal.py<br />
Ficheros compilados pyc
Ejecutando...
from modulo import *
Segunda parte....<br />
Are you ready?
El framework wx<strong>Python</strong><br />
● Creado por Robin Dunn, en 1995.<br />
● Es una librería gráfica para <strong>Python</strong>.<br />
● Permite crear programas con una interfaz gráfica robusta y de<br />
gran funcionalidad, fácil y simple.<br />
● Es un wrapper de la plataforma wxWidgets (escrita en C++).<br />
(Una adaptación de la biblioteca wxWidgets para ser usada en <strong>Python</strong>)<br />
● Es Open Source.<br />
● Multiplataforma (Windows, Unix, Mac).<br />
● Muy documentado.<br />
● Proyecto muy activo. (19/10/2010 wx<strong>Python</strong> 2.9.1.1)<br />
● www.wxpython.org (software y documentación)<br />
The only reason<br />
wx<strong>Python</strong> isn't the<br />
standard <strong>Python</strong> GUI<br />
toolkit is that Tkinter<br />
was there first.<br />
Guido van Rossum
El framework wx<strong>Python</strong><br />
● Versiones a Diciembre 2010 (para <strong>Python</strong> 2.5, 2.6 y 2.7):<br />
– Estable: 2.8.11.0<br />
– Desarrollo: 2.9.1.1<br />
● Conocimientos previos para utilizar wx<strong>Python</strong>:<br />
– Sintáxis y estucturas fundamentales de <strong>Python</strong>.<br />
– Programación orientada a objetos.<br />
● ¿Por qué? Se utilizan clases, se heredan<br />
componentes y se hace override en sus métodos y<br />
atributos.
¿Cómo funciona una aplicación<br />
wx<strong>Python</strong>?<br />
● wx<strong>Python</strong> sirve para crear aplicaciones gráficas<br />
orientadas a eventos.<br />
● A cada evento se le puede asociar un código,<br />
mediante un proceso llamado binding.<br />
● El manejador de eventos es el código que se<br />
dispara a consecuencia de la generación de un<br />
evento.<br />
● Una aplicación wx<strong>Python</strong> espera a que se generen<br />
eventos, asociando los mismos a un código,<br />
llamado manejador de eventos.
Estructura de una aplicación<br />
wx<strong>Python</strong><br />
● Una aplicación wx<strong>Python</strong> se divide en tres partes:<br />
– Importar el módulo wx (y demás cosas...)<br />
– Creación de la aplicación wx<strong>Python</strong>.<br />
– Creación del contenedor.<br />
● Componentes.<br />
● Binding.<br />
● Manejadores de eventos.
Creación de una aplicación<br />
wx<strong>Python</strong>
Creación de una aplicación<br />
wx<strong>Python</strong>
Binding y manejadores de eventos
Binding y manejadores de eventos<br />
Y al hacer click en el botón
¿Dónde está la documentación de<br />
wx<strong>Python</strong>? ¿Frame? ¿ein?
Documentación obligatoria<br />
● wx<strong>Python</strong> Demo<br />
● WxWidgets Reference<br />
●<br />
Sizers<br />
● Los widgets pueden disponerse con wx.Point y wx.Size,<br />
mediante coordenadas.<br />
● Sizer: Mecanismo de disposición de widgets en wx<strong>Python</strong>.<br />
– Maneja el tamaño y posición de sus widgets, basado en<br />
un conjunto de reglas.<br />
– Se asigna a un contenedor (wx.Panel ó wx.Frame).<br />
– Es un algoritmo para disponer ó enmarcar un grupo de<br />
widgets.<br />
– Los subwidgets que se crean dentro de un contenedor<br />
deben de añadirse por separado al sizer.<br />
– El sizer administra la posición de los widgets.
Sizers<br />
● Un sizer en wx<strong>Python</strong> es un objeto con el único<br />
propósito de administrar el posicionamiento de un<br />
conjunto de widgets dentro de un contenedor.<br />
● El sizer es la representación de un algoritmo de<br />
posicionamiento de pantalla (no un contenedor ó<br />
widget).<br />
● Un sizer es una instancia de la clase wx.Sizer.<br />
● Un sizer puede estar incluido en otro sizer.
Sizers<br />
● Tipos de sizers:<br />
– wx.BoxSizer<br />
– wx.FlexGridSizer<br />
– wx.GridSizer<br />
– wx.GridBagSizer<br />
– wx.StaticBoxSizer<br />
● Los más importantes:<br />
– wx.BoxSizer y wx.FlexGridSizer
Sizers<br />
● Aprender a utilizar sizers manualmente es:<br />
– UNA LOCURA<br />
● ¿Alguna solución?<br />
– Utilizar aplicaciones de diseño de<br />
pantallas con generación automática<br />
de código <strong>Python</strong> y wx<strong>Python</strong>.<br />
●wxGlade<br />
●wxFormBuilder<br />
●wxDesigner
wxFormBuilder<br />
● Entorno WYSIWYG para diseño gráfico de interfaces<br />
para wxWidgets.<br />
● Posibilidad de generar código <strong>Python</strong>.<br />
● Contiene muchos widgets.<br />
● Trabajar con sizers en wxFormBuilder es muy fácil.<br />
● http://wxformbuilder.org/<br />
● Tutorial: wxFormBuilder en El Viaje del Navegante
Cosas que veremos otro día...<br />
● Widgets más comunes.<br />
● Menús.<br />
● Widgets avanzados.<br />
● MVC en wx<strong>Python</strong>.<br />
● Imágenes.<br />
● Impresión.<br />
● Los controles Grid y Tree.<br />
● ....y un largo etcétera.
Ejemplos completos de wx<strong>Python</strong><br />
● Interfaz gráfica de gestión de usuarios.<br />
● Editor de texto.<br />
● Combobox y paso de parámetros entre widgets.<br />
● pyLorca, creación automática de clases.
Anexo I: IDE's, editores y GUI's para <strong>Python</strong>
IDE con GUI integrado:<br />
BOA Constructor, SharpDevelop<br />
IDE:<br />
IDLE, NetBeans, Stani's <strong>Python</strong> Editor, PyScripter, Geany,<br />
Pyragua,Wingware <strong>Python</strong> IDE, <strong>Python</strong>Win<br />
GUI:<br />
wxGlade, wxFormBuilder<br />
Editor:<br />
Editra, Notepad++, Jedit, Gedit, BlueFish, SciTE<br />
Más herramientas aquí.<br />
Shell interactivo:<br />
Dreampie
Anexo II: Recursos documentales en la red
http://pyspanishdoc.sourceforge.net/<br />
http://python.org.ar/pyar/<br />
http://www.freetechbooks.com/python-f6.html<br />
http://www.digilife.be/quickreferences/quickrefs.htm<br />
http://rgruet.free.fr/<br />
http://planet.python.org/<br />
http://pypi.python.org/pypi?:action=index<br />
http://python.alltop.com/<br />
http://ironpython-urls.blogspot.com/<br />
http://www.cheat-sheets.org/<br />
http://www.portablepython.com/<br />
http://diveintopython3.org/table-of-contents.html<br />
http://www.gaudisite.nl/<strong>Python</strong>Links.html<br />
http://code.activestate.com/recipes/langs/python/<br />
http://revista.python.org.ar/<br />
http://www.ferg.org/<br />
http://effbot.org/tkinterbook/<br />
http://wiki.python.org/moin/SpanishLanguage<br />
http://www.java2s.com/<br />
http://xoomer.virgilio.it/infinity77/index.html<br />
http://www.andypatterns.com/
Anexo III: Libros de <strong>Python</strong>, en español
● PYTHON GUÍA DE REFERENCIA<br />
– ALEX MARTELLI<br />
– EDITORIAL O'REILLY<br />
● PROGRAMACIÓN PYTHON 3<br />
– MARK SUMMERFIELD<br />
– EDITORIAL ADDISON WESLEY<br />
● PYTHON, CREAR – MODIFICAR – REUTILIZAR<br />
– JIM KNOWLTON<br />
– EDITORIAL WROX<br />
● LA GUÍA DEFINITIVA DE DJANGO<br />
– ADRIAN HOLOVATY Y JACOB KAPLAN-MOSS<br />
– EDITORIAL APRESS
El secreto para aprender <strong>Python</strong> y<br />
wx<strong>Python</strong>...<br />
Buscar, encontrar,<br />
modificar, probar y<br />
ver porqué no<br />
funciona.
¡Muchas gracias a todos!