0% encontró este documento útil (0 votos)
567 vistas26 páginas

Introduccion A Wxpython

wxPython es una biblioteca para usar wxWidgets (C++) 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 su velocidad, ya que utiliza componentes GUI estándar de cada SO. 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.

Cargado por

Aprender Libre
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
567 vistas26 páginas

Introduccion A Wxpython

wxPython es una biblioteca para usar wxWidgets (C++) 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 su velocidad, ya que utiliza componentes GUI estándar de cada SO. 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.

Cargado por

Aprender Libre
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

Lic.

Marcelo Fernndez
[email protected] - http://blog.marcelofernandez.info
Publicado bajo Licencia Creative Commons - BY, excepto las imgenes y logos tomadas de sitios de Internet

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)

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++

wxRuby wxHaskell wxRuby wxHaskell

Otros Otros

wxWidgets wxWidgets

Win32 //Win64 Win32 Win64

Windows Windows

Linux,Unix/GTK Mac OSX Linux,Unix/GTK Mac OSX


wxGTK wxGTK wxMac wxMac

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

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. 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

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 class TestFrame(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()

Jerarqua de Clases - wxPython

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.

Posicin Dinmica - Sizers

Horizontal, Vertical Boxes Grid

Sizers combinados y anidados

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

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) # ... def OnAceptar(self, event): dlg = wx.MessageDialog(self,u'Aceptar!',u'Test',wx.OK) dlg.ShowModal() dlg.Destroy()

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) # ... def OnTxtNombre(self, event): keycode = event.GetKeyCode() print u'Tecle en Nombre: ' + str(keycode) if keycode == wx.WXK_TAB: print u'Tab!'

Repaso hasta aqu

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')

Con esta lnea arm todo el form!

# 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!

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

Links

Sitio oficial:http://www.wxpython.org Libro de referencia:wxPython in Action(Manning) Wiki Comunidad:http://wiki.wxpython.org Listas de correo:


wxPython-users wx-users PyAr - http://www.python.com.ar ;-)

http://www.zetcode.com/wxpython/ http://pablotilli.com.ar/

También podría gustarte