Python y WxPython
Python y WxPython
Python me encontró...
Y desde entonces... hasta hoy
● 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
● 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...
● Editor de texto.
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
Buscar, encontrar,
modificar, probar y
ver porqué no
funciona.
¡Muchas gracias a todos!