QtQR Icon

QtQR 1.4 Released

About QtQR 1.4

I’m glad to announce that since this morning, python-qrtools and QtQR are both available in their 1.4 version for download in the daily PPA (https://launchpad.net/~qr-tools-developers/+archive/daily)

The 1.4 version includes several bug fixes, support for saving the generated codes in several image formats besides PNG (with the collaboration of Joanthan Greig), no crashes when trying to decode from webcam and there is no webcam attached, support for “WiFi Networks” QR codes and a lot more!

What is coming next?

There won’t be anymore updates to the 1.4 version, don’t expect a QtQR 1.5. The next step is a complete rewrite of both the qrtools backend and, in consequence, of QtQR also. This will be the 2.0 version.-

Enjoy!

Generando Certificados / Diplomas con Python + rst2pdf

Resulta que este 28 de Abril es la FLISoL 2012 y junto a otros integrantes de SanLuiX (el grupo de usuarios de software libre de San Luis) vamos a estar en la sede de Villa Mercedes de la Universidad Católica de Cuyo colaborando con la comunidad y llevando adelante el festival :-). A que viene todo esto se preguntarán; viene a que para emitir certificados de asistencia a la FLISoL nos surgió la necesidad de contar con algún método para generar los certificados masivamente usando software libre, y aquí es donde entra en juego Python y rst2pdf.

Después de pensar un rato, terminé con la siguiente estructura de archivos:

  • filsol (directorio)
    • asistentes.csv
    • certificado.rst
    • escudo.png
    • generar_certificados.py
    • pdf (directorio)

Veamos uno por uno:

asistentes.csv

Es un archivo .csv con la información personal de los asistentes; para las pruebas que hice usé el siguiente contenido de ejemplo:

dni1,apellido1,nombre1
dni2,apellido2,nombre2
etc...

certificado.rst

Es la estrucutra del certificado a imprimir, con los campos a reemplazar enumerados entre {}. Usemos por ejemplo el siguiente:

===========
FLISOL 2012
===========

.. image:: escudo.png
 :scale: 70

----------------------------
Universidad Católica de Cuyo
----------------------------

Por la presente se deja constancia que **{1} {2}**, *D.N.I. {0}* ha participado del evento FLISol 2012 en calidad de asistente. Realizado en la sede Villa Mercedes de la Universidad Católica de Cuyo el día 28 de abril de 2012.

escudo.pg

Como su nombre lo indica, es el escudo de la universidad, podría ser el logo de la FLISol o cualquier imagen que quisieran. Vale aclarar que este archivo no es obligatorio y depende de lo que hayan hecho en su archivo rst como maqueta del certificado.

generar_certificados.py

Este es el script de Python que genera todos los certificados a partir del listado en csv de asistentes. El código creo que se explica por sí mismo, se los dejo a continuación:

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

from csv import reader
import subprocess

print 'Abriendo listado...',
# Esto se puede poner feo...
listado = reader(open('asistentes.csv','r'))
total = len(list(listado))
listado = reader(open('asistentes.csv','r'))
print 'listo.'

print 'Abriendo certificado...',
certificado = open('certificado.rst').read()
print 'listo.'

print listado
print 'Encontrados', total, 'asistentes:'
for nro, asistente in enumerate(listado):
    dni = asistente[0]
    apellido = asistente[1]
    nombre = asistente[2]
    certificado_final = certificado.format(dni,apellido,nombre)

    print 'Generando certificado para', apellido.upper(), nombre + '...',

    p = subprocess.Popen(['rst2pdf',
                        '-s',
                        'freetype-serif,a4-landscape,twelvepoint',
                        '-o',
                        './pdf/' + dni + '-' + apellido + '-' + nombre + '.pdf'
                        ],
                        stdin=subprocess.PIPE
                        )
    p.stdin.write(certificado_final)
    p.communicate()
    print 'listo', str(nro+1), 'de', str(total) +'.'

Seguramente se puede mejorar (mucho) el código, pero como prueba de concepto resultó ser más que suficiente :-D. El script genera un pdf en la carpeta (adivinen…) pdf a partir del archivo rst por cada asistente, reemplazando el nombre y DNI que corresponde. Para ello utiliza el ejecutable de rst2pdf, seguramente se podría hacer llamando a la librería, pero la verdad no me puse a investigar cómo hacerlo.

Uso una PIPE de subprocess para alimentar a rst2pdf con el rst modificado con los datos del asistente directamente y no tener así que guardar un archivo rst distinto a disco por cada persona.

Creo que quedó bastante bien, en un puñado de líneas y nos vino al pelo! Cuando lo probemos bien les cuento cómo se portó.

New Feature for QtQR 1.3

QtQR IconAs asked by an Italian friend that posted a review on his blog (link). I’ve implemented Drag&Drop decoding support for QR Codes images directly from a website in QtQR.

You can see this in action in the following video:

You can expect this feature to be available in the daily PPA or wait for the stable release.

EDIT: Just if you don’t know, you can drag&drop to a QtQR dekstop launcher like showed in the next video, in this manner you don’t even have to open QtQR previusly to decode a file.

Any thoughts, bugs or feature request are more than welcome!

How to install QtQR in Fedora

Dependencies

QtQR 1.0/1.1/1.2 has the following dependecies:

  • PyQt4
  • qrencode
  • python-imaging (PIL or Python Image Library)
  • python-zbar
Sadly, the last one of these is not available to install via the yum package manager, or maybe it is in some repo I don’t know about. If you know where to find it please tell in the comments.

Installation

For installing PyQt4, qrencode and PIL you can use yum like this (remember to login or run as root):
yum install pyqt4 qrencode python-imaging

Once you got them installed you can go on installing python-zbar using easy_install:

easy_install zbar

If you get an “error: Setup script exited with error: command ‘gcc’ failed with exit status 1” error, you need to install the zbar-devel package first, like this:

yum install zbar-devel

And there you go.. now you can download the sourcecode from Launchpad, decompress and run QtQR with the following command:

cd <dir of qtqr sourcecode>
python qtqr.py

Summary

In summary, this are the commands you need to run (as root) to get QtQR working:

su
(enter root password)
yum install pyqt4 qrencode python-imaging zbar-devel
easy_install zbar

Tested in Fedora 15, but if you find any difficulties please let me know in the comments.. happy hacking! 🙂

Como traducir aplicaciones Qt4

Este es un post que me prometí a hacer en un post anterior. Soy un gran admirador del toolkit Qt4 y su binding para Python PyQt4 (ó PySide), es realmente excelente y se pueden lograr cosas asombrosas con él! muchos creen de manera errónea que se trata de un toolkit para hacer interfaces gráficas, pero esto no es así, las GUI son solo una parte del toolkit. Entre otras funcionalidades tenemos sockets, OpenGL, y todo un sistema para traducir nuestras aplicaciones que hacemos utilizando Qt4 y mucho más.

En este post vamos a ver como traducir una aplicación hecha en Python y PyQt4. Sigue leyendo

How to create and decode a QR Code in Python using qrtools

This is a mini-How-to for creating and decoding QR Codes in Python using the qr-tools library.

What you need…

First of all you need qrtools.py, you can get it from the QR Toosl Launchpad page:

http://bazaar.launchpad.net/~qr-tools-developers/qr-tools/python-qrtools-trunk/view/head:/qrtools.py

or you can install it from the QR Tools Stable PPA if you happen to be using Ubuntu:

https://code.launchpad.net/~qr-tools-developers/+archive/daily

If you go with the PPA, you can check that qrtools is available in your system like this:

  1. Open a terminal and execute: python
  2. Once you are into python, write import qrtools and press enter; if you don’t get any message everything is OK.
If you choose to download qrtools.py, put the file in the same directory where your script is going to be, for example: /home/me/myproject/.
Once you have the qrtools library available from your python enviroment, we can go on with the next steps.

Que hacer cuando tenés muchas tabs… (o QTabWidget vs. QStackedWidget)

Agregando funcionalidad a QtQR, me encontré con este problema. Resulta que son tantas las plantillas para generar códigos QR que me quedó chico el QTabWidget.. quedan tantas tabs que pierde todo el sentido de funcionalidad; hay que desplazarse para ver las otras plantillas disponibles y sinceramente no me gusta como queda, veanlo por ustedes mismos:

Así estaba la interfaz previo agregar las nuevas plantillas:

QtQR 1.2 Screenshot
QtQR 1.2 Screenshot

Sigue leyendo