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. ● (web, móviles, escritorio, SOAP, etc). Fácil de aprender. Multiplataforma (Unix, Mac, Windows). Multiparadigma (imperativo, funcional, OO) [se pueden mezclar entre ellos] Amplia documentación Multitud de módulos ● ● ● Ampliable mediante C y C++. Respaldado por Google, Facebook, NASA, etc. 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. ● Multiplataforma (Windows, Unix, Mac). ● Muy documentado. ● Proyecto muy activo. (19/10/2010 wxPython 2.9.1.1) ● www.wxpython.org (software y documentación) The only reason wxPython isn't the standard Python GUI toolkit is that Tkinter was there first. Guido van Rossum 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!