Introduccion a wxPython

download Introduccion a wxPython

of 26

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