Python y wxPython, ¡hoy hará Sol! - Asociación … › sites › default › files › ...Python:...

Post on 06-Jun-2020

10 views 1 download

Transcript of Python y wxPython, ¡hoy hará Sol! - Asociación … › sites › default › files › ...Python:...

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.● 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”

Cadenas chorizo...

Python: Historia

● Creado por Guido van Rossum (el benevolente dictador vitalicio) a finales de los 80.http://www.python.org/~guido/http://www.python.org/~guido/

– Desde 2005, en Google (Mountain View).Desde 2005, en Google (Mountain View).– Fija directrices y decisiones finales sobre Fija directrices y decisiones finales sobre

Python.Python.● Administrado por Administrado por PSFPSF (Python Software (Python Software

Foundation), con licencia de código abierto (Foundation), con licencia de código abierto (PSFLPSFL) ) compatible con compatible con GPLGPL de de GNUGNU a partir de versión a partir de versión 2.1.1.2.1.1.

● Sitio web oficial:Sitio web oficial: www.python.orgwww.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 generadosAl “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.htmlhttp://www.digilife.be/quickreferences/quickrefs.htmhttp://rgruet.free.fr/http://planet.python.org/http://pypi.python.org/pypi?:action=indexhttp://python.alltop.com/http://ironpython-urls.blogspot.com/http://www.cheat-sheets.org/http://www.portablepython.com/http://diveintopython3.org/table-of-contents.htmlhttp://www.gaudisite.nl/PythonLinks.htmlhttp://code.activestate.com/recipes/langs/python/http://revista.python.org.ar/http://www.ferg.org/http://effbot.org/tkinterbook/http://wiki.python.org/moin/SpanishLanguagehttp://www.java2s.com/http://xoomer.virgilio.it/infinity77/index.htmlhttp://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!