View
133
Download
2
Category
Preview:
Citation preview
Desarrollo de aplicaciones de escritorio con PythonPython y wxPythonwxPython
Ángel Luis García García http://elviajedelnavegante.blogspot.com
¿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”.
Cadenas chorizo...
● 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
● 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
Resumiendo...
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
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).
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.
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/
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.
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.
El intérprete Python
¿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)
¿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.
¿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
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.
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):
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
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.
Ejemplo de código Python, I
Ejemplo de código Python, II
● 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
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/)
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 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.
¿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
Información sobre wxPython● www.wxpython.org
● wxpython.org: wxPython DemowxPython Demo
● San GoogleSan Google
● Dos libros:Dos libros:
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.
wxPython Demo, y II
widgets... richtextctrl
widgets... toolbook
widgets... listbook
widgets... speedmeter
widgets... flatnotebook
widgets... ultimatelistctrl bittorrent
widgets... peakmeter
Widgets... piectrl
widgets... ribbonbar
widgets... aui
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
● 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
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
wxFormBuilder, y 2
wxFormBuilder, y 3
El secreto para aprender Python y wxPython...
Buscar, encontrar, modificar, probar y
ver porqué no funciona.
¡Muchas gracias a todos!Gracias a todosGracias a todos
Recommended