Python y WxPython

54
 Desarrollo de aplicaciones de escritorio con Python Python y wxPython wxPython Ángel Luis García García http://elviajedelnavegante.blogspot.com

Transcript of Python y WxPython

Page 1: Python y WxPython

   

Desarrollo de aplicaciones de escritorio con PythonPython y wxPythonwxPython

Ángel Luis García García http://elviajedelnavegante.blogspot.com

Page 2: Python y WxPython

   

¿Por qué Python?

● 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/C++.

● Respaldado por Google, Facebook, NASA, etc.

● Antídoto para el Síndrome de la Cadena “chorizo”.

Page 3: Python y WxPython

   

Cadenas chorizo...

Page 4: Python y WxPython

   

● Bello mejor que feo.

● Explícito es mejor que implícito.

● Simple es mejor que complejo.

● Complejo es mejor que complicado.

● Plano es mejor que anidado.

● Disperso es mejor que denso.

● La legibilidad cuenta.

● Los casos especiales no son tan especiales como para quebrantar las reglas.

● Aunque lo práctico gana a la pureza.

● Los errores no deberían dejarse nunca pasar.

El Zen de Python

Page 5: Python y WxPython

   

● A menos que hayan sido silenciados explícitamente.

● Frente a la ambigüedad, rechaza la tentación de adivinar.

● Debería haber una y preferiblemente sólo una manera obvia de hacerlo.

● Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.

● Ahora es mejor que nunca.

● Aunque nunca es a menudo mejor que ya mismo.

● Si la implementación es difícil de explicar, es una mala idea.

● Si la implementación es fácil de explicar, puede que sea una buena idea.

● Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

El Zen de Python

Page 6: Python y WxPython

   

Resumiendo...

Page 7: Python y WxPython

   

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  a partir de versión 2.1.1.versión 2.1.1.

● Sitio web oficial:Sitio web oficial:  www.python.orgwww.python.org

Page 8: Python y WxPython

   

Implementaciones de Python

● CPythonCPython: (o Python) Implementación de referencia. Compila, interpreta y contiene módulos codificados en C estándar.

● JythonJython: Implementación para la JVM (Máquina Virtual Java) accediendo a las bibliotecas de Java.

● IronPythonIronPython: Implementación para el CLR de Microsoft, para acceder al framework de .NET.

● PyPyPyPy: Implementación de Python escrita en Python (para rizar más el rizo).

Page 9: Python y WxPython

   

Versiones de Python

● Ayuda para elegir entre 2.xx y 3.xx:http://wiki.python.org/moin/Python2orPython3

● Tres versiones a Abril 2011:

● Python 2.6 ● Python 2.7 ● Python 3.2 

● ¿Cuál elegir? Depende de nuestras exigencias. 

● ¿Qué módulos necesitamos? Mayoría compatibles con 2.6● ¿Futuro? 2.xx es incompatible con 3.xx en algunos aspectos ● Mayoría de frameworks funcionan con 2.xx.

Page 10: Python y WxPython

   

El futuro de Python

● Lenguaje de propósito general, con más de 20 años de vida.

● Desarrollo esponsorizado 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) de base y  de terceros, ampliable.

● Utilizado en programación de sistemas, cálculo numérico, web, móviles (Android, Symbian), escritorio, 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/

Page 11: Python y WxPython

   

Conceptos generales

● Lenguaje de programación de uso general.

● De muy alto nivel ó VHLL (Very highlevel 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 automática.

Page 12: Python y WxPython

   

Composición...

● 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 (pyodbc, mysqldb, etc), XML, YAML, entorno gráfico (wx, Qt, GTK, Tk, etc), web (Django, webpy, TurboGears, Pylons, etc), y un largo etcétera.

Page 13: Python y WxPython

   

El intérprete Python

Page 14: Python y WxPython

   

¿Cómo ejecutar/desarrollar código Python? (I)

● IntérpreteIntérprete: probar estructuras, tipos de datos, módulos, expresiones regulares, etc.

● Intérprete + fichero .pyIntérprete + fichero .py: ejecutar en consola fichero con código Python. P.e.: python ejemplo.py

● IDEIDE: IDLE, PyScripter (Windows), Stani's Python Editor, Eclipse (pyDev), NetBeans, Geany, etc. 

● RADRAD: BOA Constructor, SharpDevelop (IronPython)

Page 15: Python y WxPython

   

¿Cómo ejecutar/desarrollar código Python? (y II)● Intérpretes mejoradosIntérpretes mejorados: Shell's interactivos con 

características mejoradas. P.e.: Dreampie, pyCrust, pyShell.

● EditoresEditores: emacs, vi, Editra, SciTE, NotePad++, etc.● GUI'sGUI's: Creación/diseño interfaces gráficas. P.e.: 

wxFormBuilder (wx), Glade (wx, GTK), Monkey Studio (Qt), etc.

Page 16: Python y WxPython

   

¿Cómo ejecutar/desarrollar código Python? (y III)

● Lista completa de editores, gui's e ide's en http://wiki.python.org/moin/PythonEditors.

● Lo mínimo que se le debe de pedir a cualquier Lo mínimo que se le debe de pedir a cualquier IDEIDE ó  ó editoreditor, para desarrollar en , para desarrollar en PythonPython, es la , es la indentaciónindentación, , coloreadocoloreado y  y completitudcompletitud de código. de código.

● PRUEBA, COMPARA Y SI ENCUENTRAS ALGO PRUEBA, COMPARA Y SI ENCUENTRAS ALGO MEJOR, INSTÁLALOMEJOR, INSTÁLALO

Page 17: Python y WxPython

   

Python: tipos de datos

● Tipos de datos:● Números: 2, 2.34, 4000● Booleanos: True, False● Listas: ['Hola','Mundo',2011]● Tuplas: ('Hola','Mundo',2011)● Diccionarios: {clave1:'Hola', clave2:'Mundo'}● Conjuntos.● Etc.

Page 18: Python y WxPython

   

Python: programación imperativa

● Estructuras iterativas:● for x in y● while

● Saltos condicionales:● if … then... else...

● Funciones:● def mi_funcion():● def mi_funcion(param1, param2):

Page 19: Python y WxPython

   

Python: POO

class mi_primera_clase(object):

def __init__(self, param1, param2):# Constructor.

self.atributo1 = param1

self.atributo2 = param2

def getAtributos(self):return self.atributo1, self.atributo2

def setAtributos(self, atrib1, atrib2):self.atributo1 = atrib1

self.atributo2 = atrib2

Page 20: Python y WxPython

   

Más Python, ¡más madera!

● Metaclases.● Iteradores.● Properties de clases.● Decoradores.● Programación funcional: map, reduce, lambda, …● Más tipos: named tuples, …● Formateo de cadenas.● Codificaciones, .... y un largo etcétera.

Page 21: Python y WxPython

   

Ejemplo de código Python, I

Page 22: Python y WxPython

   

Ejemplo de código Python, II

Page 23: Python y WxPython

   

● 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 KAPLANMOSS

● EDITORIAL APRESS

Libros de Python, en español

Page 24: Python y WxPython

   

Python en Internet

● Python para todos (Raúl González Duque)

● Introducción a Python (Ángel Luis García García)

● Comunidad Python Argentina (PyAr)

(http://docs.python.org.ar/tutorial/contenido.html)● Documentación Python en SourceForge 

(http://pyspanishdoc.sourceforge.net/)

Page 25: Python y WxPython

   

Page 26: Python y WxPython

   

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

Page 27: Python y WxPython

   

El framework wxPython

● Versiones a Abril  2011 (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.

Page 28: Python y WxPython

   

¿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.

Page 29: Python y WxPython

   

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.

Page 30: Python y WxPython

   

Creación de una aplicación wxPython

Page 31: Python y WxPython

   

Creación de una aplicación wxPython

Page 32: Python y WxPython

   

Binding y manejadores de eventos

Page 33: Python y WxPython

   

Binding y manejadores de eventos

Y al hacer click en el botón

Page 34: Python y WxPython

   

Información sobre wxPython● www.wxpython.org

● wxpython.org: wxPython DemowxPython Demo

● San GoogleSan Google

● Dos libros:Dos libros:

Page 35: Python y WxPython

   

wxPython Demo, y I

● Demo que muestra algunas de las capacidades de wxPython.

● Ejemplos de widgets completos y comentados, totalmente funcionales.

● Disponible para Linux, Windows y Mac.

Page 36: Python y WxPython

   

wxPython Demo, y II

Page 37: Python y WxPython

   

widgets... richtextctrl

Page 38: Python y WxPython

   

widgets... toolbook

Page 39: Python y WxPython

   

widgets... listbook

Page 40: Python y WxPython

   

widgets... speedmeter

Page 41: Python y WxPython

   

widgets... flatnotebook

Page 42: Python y WxPython

   

widgets... ultimatelistctrl bittorrent

Page 43: Python y WxPython

   

widgets... peakmeter

Page 44: Python y WxPython

   

Widgets... piectrl

Page 45: Python y WxPython

   

widgets... ribbonbar

Page 46: Python y WxPython

   

widgets... aui

Page 47: Python y WxPython

   

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.

Page 48: Python y WxPython

   

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.

Page 49: Python y WxPython

   

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● PythonCard

Page 50: Python y WxPython

   

wxFormBuilder, y 1

● 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

Page 51: Python y WxPython

   

wxFormBuilder, y 2

Page 52: Python y WxPython

   

wxFormBuilder, y 3

Page 53: Python y WxPython

   

El secreto para aprender Python y wxPython...

Buscar, encontrar, modificar, probar y 

ver porqué no funciona.

Page 54: Python y WxPython

   

¡Muchas gracias a todos!Gracias a todosGracias a todos