Skip navigation.
Sushi Knights

Creación de aplicaciones de escritorio en Linux, con Python y Glade

::

Desde que me cambié completamente a Ubuntu en el PC de la casa, extrañaba un programa al que no le encontré un sustituto: un programa para trozar archivos binarios. Con Windows usaba un programa freeware llamado Hacha.

Durante Diciembre me empeñé en hacer una versión para Linux de este programa, que creo que está lo suficientemente madura para entregarla a Uds. como regalo de Navidad :-)

¿Por qué Python?

Podría haberla hecho en Java, pero sería muy pretencioso para un programa tan pequeño, y para tener el look nativo del escritorio en Ubuntu tendría que haberlo hecho con bindings para Java... muy complicado.

Lejos, la combinación de tecnologías más atractiva para hacerlo era usar Python con GTK y Glade. Python viene con todas las distribuciones Linux modernas y creo que es el lenguaje más atractivo para aprender hoy por hoy. Además, en Ubuntu se tiene Python, GTK y Glade como parte de la instalación base. De hecho, el actualizador de paquetes (update-manager) está hecho con ellos.

Para diseñar la interfaz de usuario de nuestra aplicación usamos Glade, que tiene una apariencia más o menos similar a otros entornos para desarrollar aplicaciones de escritorio como Delphi o Visual Basic. Con Glade, la definición de las pantallas de nuestra aplicación queda contenida en un gran archivo XML que cargamos desde el programa principal escrito en Python.

Les recomiendo la experiencia a todos quienes usen Ubuntu hoy y que hayan usado Visual Basic en el pasado. Con Glade se tiene la facilidad y rapidez en el diseño, pero con un lenguaje de verdad.

Otras cosas interesantes que vienen de casi de fábrica son la internacionalización (para que usarios de otras partes del mundo puedan usar el software en su idioma y unidades nativas). Con poco esfuerzo, se generan los archivos con los textos a traducir, de forma consistente y con una detección que funciona sin problemas.

¿Qué hace el programa?

El programa te permite tomar un archivo grande y cortarlo en trozos más pequeños, que puedes enviar a otro equipo y volver a reconstruir el programa original. Puedes indicar el tamaño de los trozos, y si quieres generar un archivo de verificación para comprobar que un archivo reconstruido es igual al original.

¿Cómo lo instalo?

Por ahora, no he creado un repositorio compatible con Debian, ni lo he empaquetado, así que las alternativas más sencillas son dos:

Para usuarios novatos de Ubuntu

1.-Bajar el archivo gtkfilesplitter_0.1.1-0ubuntu1_i386.deb desde la página de descargas del proyecto en Google Code. Guardarlo en el escritorio u otra carpeta.

2.- Hacer doble-click al archivo, para instalarlo. Seleccionar "Instalar el paquete" y usar la contraseña de administrador del equipo.

3.- Listo. Ahora puedes utilizar el programa ejecutando "gtkfilesplitter" en un terminal (Aplicaciones > Accesorios > GtkFileSplitter).

Para usuarios expertos y desarrolladores

En este caso, lo mejor es hacer checkout del proyecto desde el repositorio Subversion.

1.- Si no tienes instalado Subversion, apt-get install subversion
2.- Para hacer checkout del proyecto con:

svn checkout http://gtkfilesplitter.googlecode.com/svn/trunk/ gtkfilesplitter

3.- Ejecutar en un terminal: python gtkfilesplitter.py

Ojo: El código es de una calidad bastante pobre y poco Pythonic, así que se aceptan sugerencias.

Enlaces recomendados para aprender

1.- Curso completo de Python y GTK en español

2.- Tutoriales de Glade en Bulma

ayuda

saludos... estoy nuevo en linux... tengo unos archivos cortados con hacha (creo... la extension es .000, .001 y asi susecivamente), que prodria hacer para unirlos en ubuntu?... agradecere cualquier ayuda

exelente

muy buena herramienta, se te agradece, siempre es util un programa como estos, y mas cuando aun usas dikette :P, (si yo lo uso)

Muy Bueno

Es muy bueno el articulo lo agregare a favorito

wxWidgets ?? why not ?

Hola, me parecio interesante tu articulo ya que estoy en un proyecto con python y siempre me ha gustado la construcción de GUI's en delphi, sin embargo no tengo experiencia con otras tecnologías cross platform y leyendo por ahi me pareció que lo más multiplataforma que existe son las wxWidgets.
Asi es que me pregunto ¿Tuviste algun motivo especial por el que escogiste Gtk ??

Saludos y gracias de antemano por la respuesta.

Muy bueno

Está muy bien Denis, de hecho he aprendido tu forma de hacer interfaces dinamicas (el ocultar la caja que no deberia de verse :P), yo basandome en mi experiencia con python te diría que es código muy pythonico, pero si opinaria algo:

Si estás usando en modulo "sys" solo para salir del programa, podrías mirar esto:

try:
import gtk
import gtk.glade
except:
sys.exit(1)

pones:

except:
raise SystemExit()

Así no tienes que cargar sys para nada y hace la misma funcion. Puedes colocar un string como argumento para mostrar mensaje ;)

Nada más :P

Un saludo.

Muy bueno

Está muy bien Denis, de hecho he aprendido tu forma de hacer interfaces dinamicas (el ocultar la caja que no deberia de verse :P), yo basandome en mi experiencia con python te diría que es código muy pythonico, pero si opinaria algo:

Si estás usando en modulo "sys" solo para salir del programa, podrías mirar esto:

try:
import gtk
import gtk.glade
except:
sys.exit(1)

pones:

except:
raise SystemExit()

Así no tienes que cargar sys para nada y hace la misma funcion. Puedes colocar un string como argumento para mostrar mensaje ;)

Nada más :P

Un saludo.

Me interesa Phyton

De un tiempo a esta parte me interesado mucho en el mundo de software libre, lo veo más robusto y confiable. Dentro de todo este universo, me atrae aún mas el desarrollo de aplicaciones de escritorio. Favor de enviarme links o recursos para dar mis primeros pasos en este largo camino.

Saludos de un apasionado del sosftware libre.

Bonito artículo, yo estoy

Imagen de jenriquez

Bonito artículo, yo estoy tratando de entrarle a wxWidgets pero se me está atragantando (soy electrónico, no informático :P). Desde hace algún tiempo he visto Python y la verdad es que se me antoja, pero lo checaré más tarde pues estoy decidido a no dejarme vencer por C++ y toda su "truquería" ;).

Pregunta: ¿piensas hacer el programa compatible con Hacha? Por allí hay un par de aplicaciones de código abierto para unir archivos de Hacha.

No es compatible con Hacha

Imagen de Denis

No, no fue hecho compatible con Hacha. Al parecer, Hacha incrusta el código de verificación del archivo (checksum) dentro de los trozos de archivo que generas. En mi programa, el código de verificación es opcional y se graba en un archivo por separado (archivo.md5).

Una gracia del programa es que de esta forma, los trozos los puedes unir simplemente concatenando los archivos. En Linux/Unix puedes hacerlo con "cat" y en Windows con "copy /b"

Saludos,

—Denis
California roll connoisseur

Genial, lo pondre en mi sitio

Estimado, me parece una idea genial tu programa... me has solucinado unna gran controversia...

Voy a nombrar este post en mi sitio www.vivelinux.cl, si no deseas que sea asi, por favor enviame un mail a zar@vivelinux.cl y lo sacare....

Genial!

Imagen de agraves

Hace tiempo que le estoy echando una mirada a python para desarrollo de aplicaciones graficas.... Una consulta, el algortimo en si lo implementaste tu? o es una interfaz de split?


Alvaro Graves - agraves [at] dcc punto uchile punto cl
MSN: no_mas_zpam [@]correocaliente punto com
Seconds Out, Genesis Tribute

Es un wrapper

Imagen de Denis

Hola,

No, no es una interfaz gráfica sobre split, porque no recordaba que podía trozar archivos binarios (alguna vez lo usé, pero solo podías trozar indicando el número de líneas en un archivo de texto).

El algoritmo para trozar (es super simple) lo tomé de esta receta en los foros de ActiveState. El autor aparece en los créditos de mi programa.

Saludos,

—Denis
California roll connoisseur