Python y wxPython y wxPython,, ¡hoy hará Sol!
Ángel Luis García García
Un murciano que sabe algo de Python... 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/ http://elviajedelnavegante.blogspot.com/)) (ReportLab, XML, wxPython, IronPython, MySQL, etc)
¿Por qué Python es bueno para mí? ●
●
●
●
●
Sintaxis sencilla. Fácil de aprender. Multiplataforma (Unix, Mac, Windows). Multiparadigma (imperativo, funcional, OO) [se pueden mezclar entre ellos] Amplia documentación
●
Multitud de módulos (web, móviles, escritorio, SOAP, etc).
●
●
●
Ampliable mediante C y C++. Respaldado por Google, Facebook, NASA, etc. Tengo el Síndrome de la Cadena “chorizo “chorizo””
Cadenas chorizo...
Python: Historia ●
Creado por Guido 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 ●
Python)) Implementación de referencia. Compila, CPython:: (o Python CPython interpreta y contiene módulos codificados en C estándar.
●
Jython:: Implementación para la JVM (Máquina Virtual Java) Jython accediendo a las bibliotecas de Java.
●
IronPython:: Implementación para el CRL de Microsoft, para IronPython acceder al framework de .NET.
●
( para rizar PyPy:: Implementación de Python escrita en Python ( para PyPy más el rizo). 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 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 ( 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).
●
Multiplataformaa (Linux, Mac, Windows) Multiplataform
●
Multiparadigma (imperativo, (imperativo, orientado a objetos y funcional)
●
Interpretado, dinámico, fuertemente tipado, gestión de memoria
●
Python:: Lenguaje + biblioteca estándar + Python estándar + módulos de extensión –
–
–
Lenguaje: Estructuras, palabras reservadas, funciones Lenguaje: fun ciones 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: 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 IDLE 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 ●
–
Inmutables ●
●
●
●
Listas Tuplas Cadenas
Diccionarios Conjuntos
LISTAS: ¡¡¡Todo potencia!!! ●
Instanciación: a = [] a = ['Odio el Hola Mundo',OBJECT 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 count(x), (x), index(x), append(x), remove(x), etc. – – –
●
– – – –
●
TUPLAS: Listas inmutables ●
Instanciación: – – –
●
Acceso: –
●
a = () a = ('Hola Lan Party', 2010) a = (OBJECT (OBJECT,, [], (243,343)) 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... iteradores ... Métodos: len(x), has_key(k), del(d['x'] 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')] 'Python'),(2,'wxPython')] d = {1:'XML', 2:'IronPython', 3:'ReportLab'} Conversiones: – – – –
●
– – – – – –
c1 = tuple tuple((l) c1 = ('Lan Party', 2010) list((t) c2 = ['Odio el Hola Mundo', 'Desde siempre'] c2 = list c3 = dict dict((u) c3 = {1: 'Python', 2: 'wxPython'} c4 = d.items d.items() () c4 = [(1, 'XML'), (2, 'IronPython'), (3, 'ReportLab')] c5 = d.keys d.keys() () c5 = [1, 2, 3] c6 = d.values 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 parámetros:: listas y diccionario diccionarios. s. 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. clases_base.py: persistencia.py:: Persistencia de datos. persistencia.py clases_aplicacion.py:: Lógica de negocio adaptada. clases_aplicacion.py
–
principal.py:: Aplicación. principal.py
– –
Ficheros generados Al “compilar” principal.py
Ficheros compilados
pyc
Ejecutando...
from modulo import *
Segunda parte.... Are you ready?
El framework wxPython framework wxPython ●
●
●
●
Creado por Robin Dunn, en 1995. Python.. 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++ 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 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 g ráficas orientadas a eventos. eventos . A cada evento se le puede asociar un código, mediante un proceso llamado binding 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. Sizer Maneja el tamaño y posición de sus widgets, basado en un conjunto de reglas. wx.Frame). Se asigna a un contenedor (wx.Panel ( 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: I: IDE's, editores y GUI's para Python 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í aquí..
Anexo II: II: Recursos documentales en la red
http://pyspanishdoc.sourceforge.net/ http://python.org.ar/pyar/ http://www.freetechbooks http://www .freetechbooks.com/python-f6.ht .com/python-f6.html ml http://www.digilife.be/quickr http://www .digilife.be/quickreferences eferences/quickrefs.htm /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-ofhttp://diveintopyth on3.org/table-of-contents.htm contents.htmll http://www.gaudisite.nl/PythonL http://www .gaudisite.nl/PythonLinks.html inks.html http://code.activestate.com http://code.ac tivestate.com/recipes/la /recipes/langs/python/ ngs/python/ http://revista.python.org.ar/ http://www.ferg.org/ http://effbot.org/tkinterbook/ http://wiki.python.org/moin/Spani http://wiki.python.org /moin/SpanishLanguage shLanguage http://www.java2s.com/ http://xoomer.virgilio.it/infinity77 http://xoome r.virgilio.it/infinity77/index.html /index.html http://www.andypatterns.com/
Anexo III: III: Libros de Python, en español
●
PYTHON GUÍA DE REFERENCIA – –
●
PROGRAMACIÓN PYTHON 3 – –
●
MARK SUMMERFIELD EDITORIAL ADDISON WESLEY
PYTHON, CREAR – MODIFICAR – REUTILIZAR – –
●
ALEX MARTELLI EDITORIAL O'REILLY
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!