Download Python y wxPython, ¡hoy hará Sol!

Document related concepts
no text concepts found
Transcript
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!