12.05.2013 Views

Python y wxPython, ¡hoy hará Sol!

Python y wxPython, ¡hoy hará Sol!

Python y wxPython, ¡hoy hará Sol!

SHOW MORE
SHOW LESS

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 />

● Google


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!

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!