Desarrollo de aplicaciones de escritorio con Python y wxPython
ngel Luis Garca Garca http://elviajedelnavegante.blogspot.com
Por qu Python?
Sintaxissencilla. Fcildeaprender. Multiplataforma(Unix, Mac,Windows). Multiparadigma (imperativo,funcional, OO)[sepuedenmezclarentre
ellos].
Multituddemdulos(web, mviles,escritorio,SOAP, etc). AmpliablemedianteC/C++. RespaldadoporGoogle, Facebook,NASA,etc. AntdotoparaelSndromede laCadenachorizo.
Ampliadocumentacin.
Cadenas chorizo...
El Zen de Python
Bellomejorquefeo. Explcitoesmejorqueimplcito. Simpleesmejorquecomplejo. Complejoesmejorquecomplicado. Planoesmejorqueanidado. Dispersoesmejorquedenso. Lalegibilidadcuenta. Loscasosespecialesnosontanespecialescomoparaquebrantarlasreglas. Aunqueloprcticoganaalapureza. Loserroresnodeberandejarsenuncapasar.
El Zen de Python
Amenosquehayansidosilenciadosexplcitamente. Frentealaambigedad,rechazalatentacindeadivinar. Deberahaberunaypreferiblementeslounamaneraobviadehacerlo. Aunqueesamanerapuedenoserobviaalprincipioamenosqueustedsea holands. Ahoraesmejorquenunca. Aunquenuncaesamenudomejorqueyamismo. Silaimplementacinesdifcildeexplicar,esunamalaidea. Silaimplementacinesfcildeexplicar,puedequeseaunabuenaidea. Losespaciosdenombres(namespaces)sonunagranideaHagamosmsde esascosas!
Resumiendo...
Python: Historia
CreadoporGuidovanRossum(elbenevolente dictadorvitalicio)afinalesdelos80. http://www.python.org/~guido/
Desde2005,enGoogle(MountainView). Fijadirectricesydecisionesfinalessobre Python.
AdministradoporPSF(PythonSoftware Foundation),conlicenciadecdigoabierto (PSFL)compatibleconGPLdeGNUapartirde versin2.1.1. Sitioweboficial:www.python.org
Implementaciones de Python
CPython:(oPython)Implementacindereferencia.Compila,interpretay contienemduloscodificadosenCestndar. Jython:ImplementacinparalaJVM(MquinaVirtualJava)accediendoa lasbibliotecasdeJava. IronPython:ImplementacinparaelCLRdeMicrosoft,paraaccederal frameworkde.NET. PyPy:ImplementacindePythonescritaenPython(pararizarmselrizo).
Versiones de Python
Ayudaparaelegirentre2.xxy3.xx: http://wiki.python.org/moin/Python2orPython3 TresversionesaAbril2011:
Python2.6 Python2.7 Python3.2 Qumdulosnecesitamos?Mayoracompatiblescon2.6 Futuro?2.xxesincompatiblecon3.xxenalgunosaspectos Mayoradeframeworksfuncionancon2.xx.
Culelegir?Dependedenuestrasexigencias.
El futuro de Python
Lenguajedepropsitogeneral,conmsde20aosdevida. DesarrolloesponsorizadoporGoogle. UtilizadoenIndustrialLight&Magic,Pixar,BitTorrent,U.S.National WeatherService,NASA,NSA,Fermi,Corel,RedHat,Lockheed Martin,Facebook,etc. Conferenciasanualesmundiales(PyCon). Multituddemdulos(libreras)debaseydeterceros,ampliable. Utilizadoenprogramacindesistemas,clculonumrico,web,mviles (Android,Symbian),escritorio,mquinasvirtualesJavay.NET,etc. Casosdexito:GoogleAppEngine(entornodeCloudComputingde Google,quesoportaJavayPython).Msen http://www.python.org/about/success/
Conceptos generales
Lenguajedeprogramacindeusogeneral. DemuyaltonivelVHLL(Veryhighlevelprogramming language)
Altoniveldeabstraccin(usodelistas,tuplas, diccionariostablashashing).
Multiplataforma(Linux,Mac,Windows) Multiparadigma(imperativo,orientadoaobjetosyfuncional) Interpretado,dinmico,fuertementetipado,gestinde memoriaautomtica.
Composicin...
Python:Lenguaje+bibliotecaestndar+mdulosdeextensin
Lenguaje:Estructuras,palabrasreservadas,funciones genricas,etc.Ej:print,if...else...,def():. Bibliotecaestndar:Conjuntodemdulospordefectoen ladistribucin.Ej:os,cPickle,datetime. Mdulosdeextensin:componentesextra.Ej:accesoa basesdedatos(pyodbc,mysqldb,etc),XML,YAML, entornogrfico(wx,Qt,GTK,Tk,etc),web(Django, webpy,TurboGears,Pylons,etc),yunlargoetctera.
El intrprete Python
Cmo ejecutar/desarrollar cdigo Python? (I)
Intrprete:probarestructuras,tiposdedatos, rprete mdulos,expresionesregulares,etc. Intrprete+fichero.py:ejecutarenconsolafichero rprete+fichero.py concdigoPython.P.e.:pythonejemplo.py IDE:IDLE,PyScripter(Windows),Stani'sPython IDE Editor,Eclipse(pyDev),NetBeans,Geany,etc. RAD:BOAConstructor,SharpDevelop RAD (IronPython)
Cmo ejecutar/desarrollar cdigo Python? (y II)
Intrpretesmejorados:Shell'sinteractivoscon rpretesmejorados caractersticasmejoradas.P.e.:Dreampie, pyCrust,pyShell. Editores:emacs,vi,Editra,SciTE,NotePad++,etc. Editores GUI's:Creaci n/diseointerfacesgrficas.P.e.: GUI's wxFormBuilder(wx),Glade(wx,GTK),Monkey Studio(Qt),etc.
Cmo ejecutar/desarrollar cdigo Python? (y III)
Listacompletadeeditores,gui'seide'sen http://wiki.python.org/moin/PythonEditors.
LomnimoqueseledebedepediracualquierIDE editor,paradesarrollarenPython,eslaindentacin, coloreadoycompletituddecdigo.
PRUEBA,COMPARAYSIENCUENTRASALGO MEJOR,INSTLALO
Python: tipos de datos
Tiposdedatos:
Nmeros:2,2.34,4000 Booleanos:True,False Listas:['Hola','Mundo',2011] Tuplas:('Hola','Mundo',2011) Diccionarios:{clave1:'Hola',clave2:'Mundo'} Conjuntos. Etc.
Python: programacin imperativa
Estructurasiterativas:
forxiny while ifthen...else... defmi_funcion(): defmi_funcion(param1,param2):
Saltoscondicionales:
Funciones:
Python: POO
classmi_primera_clase(object):
def__init__(self,param1,param2):
#Constructor. self.atributo1=param1 self.atributo2=param2
defgetAtributos(self):
returnself.atributo1,self.atributo2
defsetAtributos(self,atrib1,atrib2):
self.atributo1=atrib1 self.atributo2=atrib2
Ms Python, ms madera!
Metaclases. Iteradores. Propertiesdeclases. Decoradores. Programacinfuncional:map,reduce,lambda, Mstipos:namedtuples, Formateodecadenas. Codificaciones,....yunlargoetctera.
Ejemplo de cdigo Python, I
Ejemplo de cdigo Python, II
Libros de Python, en espaol
PYTHONGUADEREFERENCIA
ALEXMARTELLI EDITORIALO'REILLY
PROGRAMACINPYTHON3
MARKSUMMERFIELD EDITORIALADDISONWESLEY
PYTHON,CREARMODIFICARREUTILIZAR
JIMKNOWLTON EDITORIALWROX
LAGUADEFINITIVADEDJANGO
ADRIANHOLOVATYYJACOBKAPLANMOSS EDITORIALAPRESS
Python en Internet
Pythonparatodos(RalGonzlezDuque) IntroduccinaPython(ngelLuisGarcaGarca) ComunidadPythonArgentina(PyAr) (http://docs.python.org.ar/tutorial/contenido.html) DocumentacinPythonenSourceForge (http://pyspanishdoc.sourceforge.net/)
El framework wxPython
CreadoporRobinDunn,en1995. EsunalibreragrficaparaPython. Permitecrearprogramasconunainterfazgrficarobustaydegran funcionalidad,fcilysimple. EsunwrapperdelaplataformawxWidgets(escritaenC++).(Unaadaptacin
delabibliotecawxWidgetsparaserusadaenPython)
EsOpenSource. Multiplataforma(Windows,Unix,Mac). Muydocumentado. Proyectomuyactivo.(19/10/2010wxPython2.9.1.1) The only reason
wxPython isn't the standard Python GUI toolkit isthat Tkinter was there first.Guido van Rossum
www.wxpython.org(softwareydocumentacin)
El framework wxPython
VersionesaAbril2011(paraPython2.5,2.6y2.7):
Estable:2.8.11.0 Desarrollo:2.9.1.1 SintxisyestucturasfundamentalesdePython. Programacinorientadaaobjetos.
ConocimientospreviosparautilizarwxPython:
Porqu?Seutilizanclases,seheredancomponentes ysehaceoverrideensusmtodos.
Cmo funciona una aplicacin wxPython?
wxPythonsirveparacrearaplicacionesgrficasorientadasa eventos. Acadaeventoselepuedeasociaruncdigo,medianteun procesollamadobinding. Elmanejadordeeventoseselcdigoquesedisparaa consecuenciadelageneracindeunevento. UnaaplicacinwxPythonesperaaquesegenereneventos, asociandolosmismosauncdigo,llamadomanejadorde eventos.
Estructura de una aplicacin wxPython
UnaaplicacinwxPythonsedivideentrespartes:
Importarelmdulowx(ydemscosas...) CreacindelaaplicacinwxPython. Creacindelcontenedor.
Componentes. Binding. Manejadoresdeeventos.
Creacin de una aplicacin wxPython
Creacin de una aplicacin wxPython
Binding y manejadores de eventos
Binding y manejadores de eventos
Y al hacer click en el botn
Informacin sobre wxPython
www.wxpython.org wxpython.org:wxPythonDemo SanGoogle Doslibros:
wxPython Demo, y I
Demoquemuestraalgunasdelascapacidadesde wxPython. Ejemplosdewidgetscompletosycomentados, totalmentefuncionales. DisponibleparaLinux,WindowsyMac.
wxPython Demo, y II
widgets... richtextctrl
widgets... toolbook
widgets... listbook
widgets... speedmeter
widgets... flatnotebook
widgets... ultimatelistctrl bittorrent
widgets... peakmeter
Widgets... piectrl
widgets... ribbonbar
widgets... aui
Sizers
Loswidgetspuedendisponerseconwx.Pointywx.Size,mediante coordenadas. Sizer:MecanismodedisposicindewidgetsenwxPython.
Manejaeltamaoyposicindesuswidgets,basadoenunconjuntode reglas. Seasignaauncontenedor(wx.Panelwx.Frame). Esunalgoritmoparadisponerenmarcarungrupodewidgets. Lossubwidgetsquesecreandentrodeuncontenedordebende aadirseporseparadoalsizer. Elsizeradministralaposicindeloswidgets.
Sizers
UnsizerenwxPythonesunobjetoconelnico propsitodeadministrarelposicionamientode unconjuntodewidgetsdentrodeun contenedor. Elsizereslarepresentacindeunalgoritmode posicionamientodepantalla(nouncontenedor widget). Unsizeresunainstanciadelaclasewx.Sizer. Unsizerpuedeestarincluidoenotrosizer.
Sizers
Aprenderautilizarsizersmanualmentees:
UNALOCURA Utilizaraplicacionesdediseodepantallascon generacinautomticadecdigoPythony wxPython.
Algunasolucin?
wxGlade wxFormBuilder wxDesigner PythonCard
wxFormBuilder, y 1
EntornoWYSIWYGparadiseogrficodeinterfaces parawxWidgets. PosibilidaddegenerarcdigoPython. Contienemuchoswidgets. TrabajarconsizersenwxFormBuilderesmuyf cil. http://wxformbuilder.org/ Tutorial:wxFormBuilderenElViajedelNavegante
wxFormBuilder, y 2
wxFormBuilder, y 3
El secreto para aprender Python y wxPython...
Buscar,encontrar, modificar,probary verporquno funciona.
Muchas gracias a todos! Gracias a todos