Introduccion a wxPython
-
Upload
aprender-libre -
Category
Documents
-
view
228 -
download
0
Transcript of Introduccion a wxPython
-
8/6/2019 Introduccion a wxPython
1/26
Lic. Marcelo [email protected] - http://blog.marcelofernandez.info
Publicado bajo Licencia Creative Commons - BY,excepto las imgenes y logos tomadas de sitios de Internet
mailto:[email protected]://blog.marcelofernandez.info/http://creativecommons.org/licenses/by/2.5/ar/http://creativecommons.org/licenses/by/2.5/ar/http://blog.marcelofernandez.info/mailto:[email protected] -
8/6/2019 Introduccion a wxPython
2/26
Introduccin - GUIs en Python
Qu es una GUI? Bibliotecas: Bindings o Wrappers
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)
http://python.org.ar/pyar/InterfacesGraficashttp://python.org.ar/pyar/InterfacesGraficas -
8/6/2019 Introduccion a wxPython
3/26
Aplicacin XHaskell
Aplicacin XHaskell
wxPerl
wxPerl
Introduccin - wxPython
WindowsWin32 / Win64
WindowsWin32 / Win64
Linux,Unix/GTKwxGTK
Linux,Unix/GTKwxGTK
Mac OSXwxMac
Mac OSXwxMac
Widgets / Plataformas
OtraswxX11,wxDFB,wxMotif...
OtraswxX11,wxDFB,wxMotif...
Mi AplicacinPython
Mi AplicacinPython
wxRuby
wxRuby wxHaskell
wxHaskell Otros
Otros
Bindings
wxErlang
wxErlangwxD
wxD
Ver ms en http://wiki.wxwidgets.org/General_Information
WxPythonPython/C++
WxPythonPython/C++
wxWidgetsC++
wxWidgetsC++
Lenguajes
http://wiki.wxwidgets.org/General_Informationhttp://wiki.wxwidgets.org/General_Information -
8/6/2019 Introduccion a wxPython
4/26
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 Feeldel 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.
-
8/6/2019 Introduccion a wxPython
5/26
Introduccin - wxWidgets
-
8/6/2019 Introduccion a wxPython
6/26
Introduccin - wxWidgets
-
8/6/2019 Introduccion a wxPython
7/26
Introduccin - wxPython
wxPython ampla las ventajas de wxWidgets: 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.
Desventajas
Instalacin: No est incluido en Python mismo. Muchas capas de abstraccin.
Curva de aprendizaje media/alta, lgicamentesegn la aplicacin que se quiera desarrollar
http://xoomer.virgilio.it/infinity77/AGW_Docs/index.htmlhttp://xoomer.virgilio.it/infinity77/AGW_Docs/index.html -
8/6/2019 Introduccion a wxPython
8/26
Ejemplo 1 Hola Mundo
#!/usr/bin/env python
importwx
if__name__=='__main__': app=wx.App()
frame=wx.Frame(None,wx.ID_ANY,"Hola Mundo") frame.Show() app.MainLoop()
-
8/6/2019 Introduccion a wxPython
9/26
Ejemplo 2 Estructura Base
#!/usr/bin/env python
importwx
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()
-
8/6/2019 Introduccion a wxPython
10/26
Jerarqua de Clases - wxPython
-
8/6/2019 Introduccion a wxPython
11/26
Organizacin de Widgets
Organizacin Esttica Posicionamiento basado en pixels
Gestin manual de la ubicacin de los componentes
Pero limitado por donde se lo mire: Monitores y/o Resoluciones diferentes
Idiomas, SOs, Skins, Tipografas diferentes
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.
-
8/6/2019 Introduccion a wxPython
12/26
Posicin Dinmica - Sizers
Horizontal, Vertical Boxes
Grid
Sizers combinados y anidados
-
8/6/2019 Introduccion a wxPython
13/26
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)
# ...
-
8/6/2019 Introduccion a wxPython
14/26
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
http://www.wxpython.org/docs/api/wx.Event-class.htmlhttp://www.wxpython.org/docs/api/wx.Event-class.html -
8/6/2019 Introduccion a wxPython
15/26
Ejemplo 4/1 - Eventos# ... Dentro de la clase MainWindow Ejemplo Mouse
# Defino botones Aceptar/Cancelar self.btnAceptar = wx.Button(self,wx.ID_ANY,u'&Aceptar')
# Conecto el evento click a la funcin OnAceptar self.btnAceptar.Bind(wx.EVT_BUTTON, self.OnAceptar)
# ...
defOnAceptar(self, event): dlg = wx.MessageDialog(self,u'Aceptar!',u'Test',wx.OK)
dlg.ShowModal() dlg.Destroy()
-
8/6/2019 Introduccion a wxPython
16/26
Ejemplo 4/2 - Eventos
# ... Dentro de la clase MainWindow Ejemplo Teclado
# Creo el widget TextCtrl self.txtNombre = wx.TextCtrl(self)
# Conecto el evento Key_Up a OnTxtNombre self.txtNombre.Bind(wx.EVT_KEY_UP, self.OnTxtNombre)
# ...
defOnTxtNombre(self, event): keycode = event.GetKeyCode()
printu'Tecle en Nombre: ' + str(keycode) ifkeycode == wx.WXK_TAB: printu'Tab!'
-
8/6/2019 Introduccion a wxPython
17/26
-
8/6/2019 Introduccion a wxPython
18/26
Diseadores de GUI
Ventajas
Flexibilidad. Permiten separar el cdigo de la vista.
Permiten ver inmediatamente las ventanas connuestros widgets y sin tener que escribir cdigo.
S escala! XRC: Formato estndar de wxWidgets para describir
GUIs. Es un simple archivo XML.
Desventajas No sirve en todos los casos: Formularios dinmicos.
La carga del XML es un poco ms lenta que siarmamos la interfaz con cdigo.
http://wiki.wxpython.org/XRCTutorialhttp://wiki.wxpython.org/XRCTutorial -
8/6/2019 Introduccion a wxPython
19/26
Boa Constructor
BoaConstructor
-
8/6/2019 Introduccion a wxPython
20/26
-
8/6/2019 Introduccion a wxPython
21/26
XRCed
-
8/6/2019 Introduccion a wxPython
22/26
-
8/6/2019 Introduccion a wxPython
23/26
-
8/6/2019 Introduccion a wxPython
24/26
Y i f
-
8/6/2019 Introduccion a wxPython
25/26
Y como si fuera poco...
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
-
8/6/2019 Introduccion a wxPython
26/26