Introduccion A Wxpython
Introduccion A Wxpython
Marcelo Fernndez
[email protected] - http://blog.marcelofernandez.info
Publicado bajo Licencia Creative Commons - BY, excepto las imgenes y logos tomadas de sitios de Internet
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)
Introduccin - wxPython
Mi Aplicacin Mi Aplicacin Bindings
wxD wxErlang wxD wxErlang wxPerl wxPerl Python Python
Lenguajes
Aplicacin X Aplicacin X
Haskell Haskell
WxPython WxPython
Python/C++ Python/C++ C++ C++
Otros Otros
wxWidgets wxWidgets
Windows Windows
wxX11,wxDFB,wxMotif... wxX11,wxDFB,wxMotif...
Otras Otras
Widgets / Plataformas
Ver ms en http://wiki.wxwidgets.org/General_Information
Introduccin - wxWidgets
wxPython es una biblioteca para usar wxWidgets (C++) desde Python Hereda sus caractersticas
Robusta, aos evolucionando (1992). Pensado para ser Multiplataforma desde el inicio. Conserva el Look and Feel del entorno y su velocidad, ya que utiliza componentes GUI estndar de cada SO. Permite embeber componentes nativos. LGPL. Aplicaciones con cualquier licencia. Windows, Linux, Mac y ms con casi el mismo cdigo fuente, slo recompilando.
Introduccin - wxWidgets
Introduccin - wxWidgets
Introduccin - wxPython
Es Python: ms fcil de aprender y adecuado que C++. Cdigo pythnico. + Fcilmente extensible, AGW es un ejemplo. Windows, Linux, Mac y ms con el mismo cdigo. Instalacin: No est incluido en Python mismo. Muchas capas de abstraccin. Curva de aprendizaje media/alta, lgicamente segn la aplicacin que se quiera desarrollar
Desventajas
Organizacin de Widgets
Organizacin Esttica
Posicionamiento basado en pixels Gestin manual de la ubicacin de los componentes Pero limitado por donde se lo mire:
Organizacin Dinmica
Mucho ms util en todos el resto de los casos wxWidgets lo provee mediante los Sizers Diferentes algoritmos de posicionamiento, diferentes subclases de Sizer.
Ejemplo 3 Sizers
# ... Dentro de la clase MainWindow # Sizer de Botones self.sizer_botones = wx.BoxSizer(wx.HORIZONTAL) # ... # Widget -- Caja de Texto self.txtNotes = wx.TextCtrl(self, style=wx.TE_MULTILINE) # Sizer de Grilla self.sizer_form = wx.GridSizer(rows=2, cols=3) # ... # Agrego cada Sizer al Sizer de la Ventana con su proporcin y flags self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.sizer_botones, proportion=0, flag=wx.EXPAND) self.sizer.Add(self.txtNotes, proportion=1, flag=wx.EXPAND) self.sizer.Add(self.sizer_form, proportion=0) self.SetSizer(self.sizer) # ...
WxPython - Eventos
wxPython est en un loop infinito, el MainLoop(), esperando que el usuario haga algo. Accin(Objeto) => Reaccin = Evento Bind() permite que un evento invoque una funcin window.Bind(wx.EVT_BUTTON, self.OnClick) def OnClick(self, event): print 'Click!' # event es una instancia de wx.Event Siguen una jerarqua en algunos casos event.Skip() permite que el evento la siga
Con poco cdigo se pueden hacer aplicaciones de escritorio multiplataforma, sin salir de Python... La instalacin para un desarrollador es muy sencilla y para el cliente tambin. Aplicaciones con Look and Feel nativo! Lo malo: Este mtodo no escala. La Capa Visual y la Lgica de Negocio estn mezcladas. Algo no va bien...
Diseadores de GUI
Ventajas
Flexibilidad. Permiten separar el cdigo de la vista. Permiten ver inmediatamente las ventanas con nuestros widgets y sin tener que escribir cdigo. S escala! XRC: Formato estndar de wxWidgets para describir GUIs. Es un simple archivo XML. No sirve en todos los casos: Formularios dinmicos. La carga del XML es un poco ms lenta que si armamos la interfaz con cdigo.
Desventajas
Boa Constructor
Boa Constructor
wxGlade
wxGlade
Totalmente Visual Genera XRC y .py No soporta muchos de los controles actuales de wxPython Bastante rstico
XRCed
wxFormBuilder
Ejemplo 5 XRC
import import wx wx.xrc as xrc class EditorApp(wx.App):
def OnInit(self): # Cargo el XRC y el frame principal self.res = xrc.XmlResource('example.xrc') self.frame = self.res.LoadFrame(None, 'MainWindow') # Obtengo la referencia al texto, til self.txtTexto = xrc.XRCCTRL(self.frame, 'txtTexto')
# Conecto los eventos ... self.frame.Bind(wx.EVT_MENU,self.OnSalir,id=xrc.XRCID('mnuSalir')) self.frame.Show() return True # ... Defino las dems funciones / callbacks en la App if __name__ == '__main__': app = EditorApp() app.MainLoop()
wxPython Demo
Demo!
Visualizacin e impresin de HTML simple Print Framework, con vista previa y configuracin Clipboard y drag and drop Ayuda en lnea. Gran comunidad alrededor Librera de graficacin de objetos vectoriales: OGL. Soporte para Cairo y OpenGL (GLCanvas) Texto enriquecido (RTF) y "estilizado" (STC) Animaciones y multimedia Programacin multiproceso, Unicode, componentes personalizados, wx.AUI
Links
http://www.zetcode.com/wxpython/ http://pablotilli.com.ar/