Post on 06-Jun-2020
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
●
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!