Read without ads and support Scribd by becoming a Scribd Premium Reader.
 
43
www.linux-magazine.es
Número
04
DESARROLLO
Python
M
uchos os preguntareis que es Jython. Bien, empecemosdesde el principio. Un grupode programadores,
 Jim Hugunim
(sucreador) y
Guido van Rossum
(personali-dad dentro del mundo de Python) entreotros, decidieron que la simpleza y lalimpieza del código de
 Python
haría per-fecto programar en Java, así que sepusieron manos a la obra, y crearon Jython. Jython es la
implementación
dePython en la plataforma Java, combinan-do la potencia de los paquetes de Java,como JavaBeans, con la facilidad y rapi-dez de desarrollo de aplicaciones dePython. Recordad que desarrollar unaaplicación es por lo menos dos vecesmás corto en Python que en Java. Jython posee las mismas característicasde Python y además posee la característicade poder trabajar con las librerías de Java,de forma que, por ejemplo, podemosdisponer del bonito
swing 
de Java o uti-lizar
 JavaBeans
e incluso programar
applets
. En la Web de Jython en [1] apare-cen algunos ejemplos de appletsdesarrollados en Jython. Esto hace de élun lenguaje muy potente ya que nosahorramos tiempo, líneas de código yresulta menos engorroso de leer que Java.Incluso podemos compilar el código parano tener la necesidad de instalar Jythonantes de ejecutar nuestra aplicación encualquier ordenador ya que es capaz degenerar
 Bytecode
 Java (aunque necesita-mos tener Java, obviamente). Aunqueciertamente no todo es positivo. Las apli-caciones desarrolladas con Jython suelenser bastante más lentas que las desarro-lladas con Java y de esto se quejanmuchos programadores, pero aún así, lapotencia y rapidez de los ordenadores dehoy hace que apenas se note la diferencia.Muchos os preguntareis si hace faltasaber Java para programar Jython. Enprincipio, no. Sí es conveniente teneridea de su funcionamiento y disponer dela
 API 
de Java, disponible en la web de
Sun
[2], para saber que queremos hacery como lo queremos hacer, pero la sin-taxis y la forma de programar es muydiferente. Programar en Java sin la APIde Sun resulta, en la mayor parte de loscasos, imposible. En cambio, para pro-gramar en Jython sí es necesario saberprogramar en Python, así pues, damos
Este mes,os descubrimos Jython.La forma mas sencillade desarrollar vuestras aplicaciones Java como si las pro-gramáramos con Python.
POR PEDRO ORANTES Y JOSÉ MARÍA RUÍZ
¿No has encontrado tu lector
RSS
? Hazte uno tu mismo con Jython.
Cuando los MundosChocan
01 import javax.swing as swing02 import java.awt as awt0304 cuadroTexto =swing.JTextField(10)0506 def __init__():07 win =swing.JFrame("Ejemplo conbotones")08 acciones = ['uno','dos', 'tres']0910 pnlBotones =swing.JPanel(awt.FlowLayout())1112pnlBotones.add(cuadroTexto)13 for cadaBoton inacciones:14pnlBotones.add(swing.JButton(cadaBoton,actionPerformed=accion))1516win.contentPane.add(pnlBotones)17 win.size=(300,300)18 win.pack()19 win.show()2021 def accion(event):22 accionBoton =event.getActionCommand()23 if accionBoton =="uno":24cuadroTexto.setText("UNO")25 elif accionBoton =="dos":26cuadroTexto.setText("DOS")27 else:28cuadroTexto.setText("TRES")29 root = __init__()
Listado 1:Tres botones
043-047_Python_Linux4 15.02.2005 11:06 Uhr Página 43
 
44
Número
04
www.linux-magazine.es
Python
DESARROLLO
001 #!/usr/bin/jython002003 import javax.swing as swing004 import java.lang as lang005 import java.awt as awt006 import java.util as util007 import os008009 class Lector:010011 def exit(self, event):012 lang.System.exit(0)013014 def __init__(self):015016 self.vectorrss =util.Vector()017 self.vectorurl =util.Vector()018 self.listaRSS()019 self.listaNoticias()020 self.pnlBotones()021 self.menu()022 ifos.path.exists('listarss.txt'):023self.leeFicheroRss()024 self.win =swing.JFrame("JyRss",size=(300,300),windowClosing=self.exit)025self.win.setJMenuBar(self.menu)026self.win.contentPane.add(self.pnlBoton,awt.BorderLayout.NORTH)027self.win.contentPane.add(self.jscplista,awt.BorderLayout.WEST)028self.win.contentPane.add(self.jscpNoticias,awt.BorderLayout.CENTER)029 self.win.setSize(600,400)030 self.win.show()031032 def pnlBotones(self):033 self.pnlBoton =swing.JPanel(awt.FlowLayout())034 acciones =["Añadir","Borrar","Leer"]035 self.txtUrl =swing.JTextField(10)036 lblNombre =swing.JLabel("Nombre")037 self.txtNombre =swing.JTextField(10)038 lblUrl =swing.JLabel("Url")039self.pnlBoton.add(lblNombre)040self.pnlBoton.add(self.txtNombre)041self.pnlBoton.add(lblUrl)042self.pnlBoton.add(self.txtUrl)043044 for cadaBoton inacciones:045self.pnlBoton.add(swing.JButton(cadaBoton,actionPerformed=self.accionMenu))046047 def menu(self):048 opciones =["Guardar"]049 self.menu =swing.JMenuBar()050 archivo =swing.JMenu("Archivo")051 for eachOpcion inopciones:052archivo.add(swing.JMenuItem(eachOpcion,actionPerformed=self.accionMenu))053self.menu.add(archivo)054055 def listaRSS(self):056 self.lstLista =swing.JList()057 self.jscplista =swing.JScrollPane(self.lstLista)058self.jscplista.setSize(100,100)059060 def listaNoticias(self):061 self.lstNoticias =swing.JEditorPane()062 self.jscpNoticias =swing.JScrollPane(self.lstNoticias)063064 def leeFicheroRss(self):065 f =open('listarss.txt','r')066 fu =open('listaurl.txt', 'r')067 linea = f.readline()068 lurl = fu.readline()069 while linea:070self.vectorrss.add(linea)071self.vectorurl.add(lurl)072 linea =f.readline()073 lurl =fu.readline()074 f.close()075 fu.close()076self.lstLista.setListData(self.vectorrss)077078 defleeFicheroNoticias(self):079 fg =open('news.txt','r')080 texto = fg.read()081 fg.close()082self.lstNoticias.setText(texto)083084 def guardarFichero(self):085 fg =open('listarss.txt','w')086 furl =open('listaurl.txt','w')087 j =self.vectorrss.size()088 i = 0089 while i<=j-1:090 texto =self.vectorrss.get(i)091 fg.write(texto+'\n')092 texto =self.vectorurl.get(i)
Listado 2:JyRSS.py
043-047_Python_Linux4 15.02.2005 11:06 Uhr Página 44
 
plo de este artículo nos valdremos deuna aplicación externa ligeramentemodificada (el código original lo encon-trareis en la web de
xml.com
en [3])desarrollada en Python, para que podáisecharle un ojo al código si os apetece,desde la cual parsearemos el xml de undocumento
 RSS
para leer las últimasnoticias de los blogs que mas frecuente-mente visitemos. Más adelante expli-caremos esto detalladamente.
Instalación de Jython.
Para trabajar con Jython, necesitamostener Java instalado en nuestro orde-nador. Podemos usar el
 Java Runtime Edition
(
 j2re
), o el
 Java Developers Kit 
(
 j2sdk
), en su
version 1.4.2
comomínimo, descargables desde [2].por sabido todo lo que hayáis aprendidoen los artículos anteriores de esta revista.En este artículo aprenderemos a usarelementos básicos de Java en Jython,trabajaremos con
swing 
, y usaremosalgunos objetos de Java como son losvectores, entre otras cosas. Para el ejem-
45
www.linux-magazine.es
Número
04
DESARROLLO
Python
Figura 1:Nuestra utilidad busca-palabras en marcha.
Además necesitamos instalar el intér-prete de Jython disponible en [1], en suúltima versión estable (la
jython-2.1
) y,por último, para ejecutar nuestra apli-cación, deberemos tener instalado elintérprete de Python (
versión 2.3
).Una vez hemos descargado el intér-prete de Jython, debemos proceder a lainstalación del mismo. Ejecutamos
 java jython-21
y nos saldrá el instalador(Figura 1), que nos pedirá confirmar unaserie de opciones y un directorio y yatendremos Jython instalado en nuestroordenador. Adicionalmente podemos
enlazar 
los ejecutables de Jython a nues-tro directorio de binarios del sistema (
ln-s jython-2.1/jython /usr/bin/jython
y
ln-s jython-2.1/jythonc /usr/bin/jythonc 
ennuestro caso) para no tener que ejecutarlos binarios desde el directorio donde lotengamos instalado. Esto último esrecomendable, además de que resultamucho más cómodo.
Primeros pasos
Bueno, ya está todo preparado en nues-tro sistema. Es hora de ver como fun-ciona Jython. Para empezar, podéistrastear un poco con el intérprete comolo habéis hecho con el de Python, y asípodréis ver que el funcionamiento esidéntico.
$ jythonJython 2.1 on java1.4.2_05
(JIT: null)Type "copyright", "credits" or
"license" for more information.>>> print 'Hola Mundo'Hola Mundo>>>
Bien, vamos a empezar a ver algunosejemplitos en java. Para empezar, ¿quétal el típico
 Hola mundo
con
swing 
? Esteejemplo mostrará una ventana llamada
 Hola Mundo
, con un cuadro de texto.Para cerrarla tendréis que cerrar el intér-prete con
Control + C 
ya que en el ejem-plo, no implementamos la salida de laaplicación.
01 $ jython02 Jython 2.1 on java1.4.2_05(JIT: null)03 Type "copyright", "credits"or "license"for more information.
093 furl.write(texto+'\n')094 i = i+1095 fg.close()096 furl.close()097098 def accionMenu(self,event):099 self.accion =event.getActionCommand()100 if self.accion =='Añadir':101 ifself.txtNombre.getText() =="":102self.vectorrss.add("SINNOMBRE\n")103 else:104self.vectorrss.add(self.txtNombre.getText())105 ifself.txtUrl.getText() == "":106self.vectorurl.add("SINURL\n")107 else:108self.vectorurl.add(self.txtUrl.getText())109110self.lstLista.setListData(self.vectorrss)111self.txtNombre.setText("")112self.txtUrl.setText("")113114 elif self.accion =='Leer':115 item =self.lstLista.getSelectedIndex()116 url =self.vectorurl.get(item)117 os.system('pythonlrss.py '+ url)118self.leeFicheroNoticias()119120 elif self.accion =='Borrar':121 itemborrar =self.lstLista.getSelectedIndex()122self.vectorrss.remove(itemborrar)123self.vectorurl.remove(itemborrar)124self.lstLista.setListData(self.vectorrss)125126 elif self.accion =='Guardar':127self.guardarFichero()128 root = Lector()
Listado 2:JyRSS.py (continuación)
043-047_Python_Linux4 15.02.2005 11:06 Uhr Página 45
Search History:
Searching...
Result 00 of 00
00 results for result for
  • p.
  • Notes
    Load more