2 ene. 2010

Desarrollo de aplicaciones gráficas con python+gtk+glade. Parte 10. Generador de código de barra

En este artículo se explicará como usar los botones de radio y manejar imágenes. El programa es un generador de códigos de barra.

Python tiene un módulo para crear imágenes svg con código de barra, Este módulo se llama pyBarcode; para poder instalar este módulo se requiere python2.6 y en el equipo por defecto python2.5. Se instaló la versión 2.6 y se compilo pyBarcode con esta versión. Por esa razón se creo un script para generar el código de barras que usa python 2.6 y el programa gráfico usa python2.5.

En el programa gráfico se le puede pasar un número de 12 dígitos para generar un código de barras o generar el código de forma aleatoria.

El diseño gráfico de la aplicación se muestra en la siguiente figura:

El código del script que genera el código de Barras es el siguiente:

#!/opt/python/bin/python2.6
# -*- coding: utf-8 -*-
#Importar barcode y sys
import barcode,sys


#Funcion generar codigo se le pasa el numero para generar el codigo
def generar_codigo(dato):
#Se usara EAN13
EAN = barcode.get_barcode('ean13')
ean = EAN(u'%s' %dato)
#Se salva el archivo en formato svg
fullname = ean.save('ean13_barcode')
fullname


if __name__ == "__main__":
#se importa el modulo commands
import commands
#Se borra el archivo anterior
commands.getstatusoutput("rm ean13_barcode.svg")
#Se toma el argumento para generar el codigo
dato =sys.argv[1]
#Se ejecuta la funcion
generar_codigo(dato)


El código de la aplicación gráfica es el siguiente:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importar modulo gtk,commands y random
import gtk, commands, random

class App:
def __init__(self):
#Manejo del archivo glade por medio de gtkbuilder
self.glade_file = "ej13.ui"
self.glade = gtk.Builder()
self.glade.add_from_file(self.glade_file)
# cargar los widgets de la interfaz
self.window = self.glade.get_object('dialog1')
self.button1 = self.glade.get_object('button1')
self.button2 = self.glade.get_object('button2')
self.button3 = self.glade.get_object('button3')
self.radiobutton1 = self.glade.get_object('radiobutton1')
self.radiobutton2 = self.glade.get_object('radiobutton2')
self.entrada = self.glade.get_object('entry1')
self.imagen = self.glade.get_object('image1')
#Valores iniciales de la aplicacion Titulo y tama?o de la ventana
self.window.set_title("Ejemplo de generacion de codigo de barra")
self.window.set_default_size(600, 400)


#Asociar los eventos de los 2 botones y de la ventana
self.window.connect("close",self.__on_dialog1_close)
self.window.connect("destroy",self.__on_dialog1_destroy)
self.button1.connect ("clicked",self.__on_button1_clicked)
self.button2.connect ("clicked",self.__on_button2_clicked)
self.button3.connect ("clicked",self.__on_button3_clicked)
self.radiobutton1.connect("toggled",self.__on_radiobutton1_toggled)
self.radiobutton2.connect("toggled",self.__on_radiobutton2_toggled)
#Se muestra todos los widgets
self.window.show_all()


def __on_radiobutton1_toggled(self,*args):
#Si este boton se selecciona se muestra la entrada de datos
self.entrada.show()


def __on_radiobutton2_toggled(self,*args):
#Si este boton se selecciona se oculta la entrada de datos
self.entrada.hide()

def __on_dialog1_close(self,*args):
#Se cierra la aplicacion
gtk.main_quit()

def __on_dialog1_destroy(self,*args):
#Se cierra la aplicacion
gtk.main_quit()

def __on_button1_clicked(self,*args):
#Creacion del codigo de barra
if self.radiobutton1.get_active() == True:
#Si el boton de radio esta activo se captura la entrada de texto
self.texto = self.entrada.get_text()
valor = int(self.texto)
elif self.radiobutton2.get_active() == True:
#Se el boton de radio esta activo se oculta la entrada de texto y se genera el numero
#de forma aleatoria
self.entrada.hide()
valor = int(random.random()*1000000000000)
#Se ejecuta el generador de codigo de barra
commands.getstatusoutput("./generador.py %s" %valor)
#Se carga la nueva imagen del codigo de barra generado
self.imagen.set_from_file('./ean13_barcode.svg')

def __on_button2_clicked(self,*args):
#El boton salir, se cierra la aplicacion
gtk.main_quit()

def __on_button3_clicked(self,*args):
#El boton se restaurar la aplicacion, se coloca una imagen en blanco
self.imagen.set_from_file('./1.png')


def main(self):
#Se inicia la aplicacion
gtk.main()


if __name__ == "__main__":
#Se crea una instancia del objeto y se ejecuta el metodo main
app = App()
app.main()

La siguiente gráfica muestra la ejecución de la aplicación:
Publicar un comentario en la entrada

AddThis