Introduccion a wxPython
marcelo.fidel.fernandez@gmail.com - http://blog.marcelofernandez.info
Publicado bajo Licencia Creative Commons - BY,
excepto las imágenes y logos tomadas de sitios de Internet
Introducción - GUIs en Python
¿Qué es una GUI? ¿Y un toolkit gráfico?
Bibliotecas: ”Bindings” o ”Wrappers”
Toolkits disponibles en Python:
Tcl/Tk: Instalada por defecto.
wxPython:wrapper de wxWidgets (antes wxWindows)
PyGTK: wrapper de GTK.
PyQT: wrapper de QT.
(Ver comparativa en http://python.org.ar/pyar/InterfacesGraficas)
Introducción - wxPython
Biblioteca para usar wxWidgets desde Python
Hereda sus características
Robusta, años evolucionando (1992).
Pensado para ser Multiplataforma desde el inicio.
Conserva el Look and Feel del entorno y suvelocidad,
ya que utiliza componentes GUI estándar de cada SO.
No sufre del problema del ”común denominador”.
Flexibilidad. Permite embeber componentes nativos.
LGPL. Aplicaciones con cualquier licencia.
Windows, Linux, Mac y más con casi
el mismo código fuente, sólo recompilando.
Introducción - wxWidgets
Introducción - wxWidgets
Introducción - wxPython
Pero wxPythonamplía las ventajas:
Es Python: más fácil de aprender y adecuado que C++.
Código ”pythónico”.
+ Fácilmente extensible, AGW es un ejemplo.
Windows, Linux, Mac y más con el mismo código
fuente, sin recompilar. Sólo se ejecuta el script y listo.
Desventajas
Instalación: No está incluido en Python mismo.
Muchas capas de abstracción.
Curva de aprendizaje media/alta,lógicamente
según la aplicación que se quiera desarrollar
Introducción - wxPython
Mi
Mi Aplicación
Aplicación
Python
Python
Bindings
wxD
wxD wxErlang
wxErlang
wxPerl
wxPerl
WxPython
WxPython
Python/C++
Python/C++
wxRuby
wxRuby wxHaskell
wxHaskell
Otros
Otros
wxWidgets
wxWidgets
C++
C++
Windows
Windows
Win32
Win32//Win64
Win64
Linux,Unix/GTK
Linux,Unix/GTK Mac
Mac OSX
OSX
wxGTK
wxGTK
wxMac
wxMacWidgets / Plataformas
Ver más en http://wiki.wxwidgets.org/General_Information
Otras
Otras
wxX11,wxDFB,wxMotif...
wxX11,wxDFB,wxMotif...
Ejemplo 1 – Hola Mundo
#!/usr/bin/env python
import wx
if __name__ == '__main__':
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "Hola Mundo")
frame.Show()
app.MainLoop()
Ejemplo 2 – Estructura Base
#!/usr/bin/env python
import wx
classTestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
if __name__ == '__main__':
app = wx.App()
frame = TestFrame(None, 'Editor de Texto')
frame.Center()
frame.Show()
app.MainLoop()
Modelo de Cajas - wxPython
Todo lo visible hereda de wx.Window
Existen ventanas ”contenedores”,
quesirven para contener a otras
ventanas. Ej.: wx.Frame, wx.Panel,
wx.ScrolledWindow.
Los contenedores permiten aislar y
gestionar las regiones que él ocupa,
para definir dónde se ubicarán y
cómo se distribuirán finalmente los widgets que
contiene.
Un contenedor puede contener uno o más
widgets y/o contenedores
Organización de Widgets
Organización Estática
Posicionamiento basado en pixels
Gestión manual de la ubicación de los componentes
Pero limitado por donde se lo mire:
Monitores y/o Resoluciones diferentes
Idiomas, SOs, ”Skins”, Tipografías diferentes
Organización Dinámica
Mucho más util en todos el resto de los casos
wxWidgets lo provee mediante los Sizers
Diferentes algoritmos de posicionamiento,
diferentes subclases de Sizer. (demo)
Ejemplo 3/1 –Sizers y Widgets
#!/usr/bin/env python
# coding: utf-8
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
# Llamo al constructor del padre de MainWindow
wx.Frame.__init__(self, parent, title=title, size=(640,480))
# Creo una StatusBar para la ventana
self.CreateStatusBar()
# Creo una instancia de Menú y le agrego items
filemenu= wx.Menu()
filemenu.Append(wx.ID_ABOUT,...
Regístrate para leer el documento completo.