Los widgets nuevos que se utilizarán son:
- QCheckButton: Permite crear botones check, se pueden seleccionar varios opciones.
- QPixmap: Permite agregar una imagen a una etiqueta.
- QFileDialog: Abre una ventana de dialogo para abrir o salvar un archivo.
El código del programa es el siguiente:
#!/usr/bin/env python # -*- coding: utf-8 -*- #modulo qrencode from qrencode import encode #Se importa el modulo sys import sys #De PyQt4 importar QtGui y QtCore from PyQt4 import QtGui, QtCore #Import os import os class App(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) #Se define el tamagno y posicion de la ventana self.setGeometry(0, 50, 600, 400) #Se le coloca un titulo a la ventana y se asocia un icono. self.setWindowTitle('Generacion de codigo QR') self.setWindowIcon(QtGui.QIcon('./openlogo-50.png')) #Se crea la etiqueta para la foto foto = QtGui.QLabel("Foto: ") self.imagen = QtGui.QLabel("") #Se crea el boton para cargar la foton cargar = QtGui.QPushButton("Cargar Foto",self) #Etiqueta nombre self.nombre = QtGui.QLabel('Nombre: ') #Entrada de datos del nombre self.nombreEdit = QtGui.QLineEdit() #Se crea la etiqueta y etrada de datos de la cedula self.etiquetaCedula = QtGui.QLabel("Cedula") self.cedula = QtGui.QLineEdit() #Se crea la etiqueta y el widget para la fecha #de nacimiento fechaEtiqueta = QtGui.QLabel("Fecha de Nacimiento") self.fecha = QtGui.QDateEdit(self) #Se define el formato dia/mes/agno self.fecha.setDisplayFormat("dd/MM/yyyy") #Se fija la fecha inicial a la fecha actual self.fecha.setDate(QtCore.QDate.currentDate()) #Se define la etiqueta que pregunta por el sexo etiquetaSexo = QtGui.QLabel("Sexo:") #Se definen los botones de radio para masculino y femenino self.botonradio1 = QtGui.QRadioButton("&Masculino",self) self.botonradio2 = QtGui.QRadioButton("&Femenino",self) #Etiqueta ciudad. self.ciudadEtiqueta = QtGui.QLabel("Ciudad de Nacimiento:") #Se define el comboBox con las ciudades self.combo = QtGui.QComboBox(self) ciudades = ["Maracaibo", "Valencia","Maracay","Barquisimeto","Merida","Caracas", "San Cristobal","Barinas","El vigia","Ciudad Bolivar", "Puerto Ordaz","Coro","Puerto Cabello","Margarita"] for ciudad in ciudades: self.combo.addItem(ciudad) #Se crea la etiqueta de dia de la semana diasemana = QtGui.QLabel("Dia semana") #Se define los botones de check para los dias de la semana self.lunes = QtGui.QCheckBox("Lunes",self) self.martes = QtGui.QCheckBox("Martes",self) self.miercoles = QtGui.QCheckBox("Miercoles",self) self.jueves = QtGui.QCheckBox("Jueves",self) self.viernes = QtGui.QCheckBox("Viernes",self) #Se define el boton salir quit = QtGui.QPushButton('Salir', self) #Se define el boton procesar la informacion okButton = QtGui.QPushButton("Procesar",self) #Se crea la etiqueta que mostrara el codigo QR self.label = QtGui.QLabel(self) #Se define un timer self.timer = QtCore.QBasicTimer() self.step = 0 #Se empaquetan los widgets en la ventana. grid = QtGui.QGridLayout() grid.setSpacing(10) grid.addWidget(foto,1,0) grid.addWidget(self.imagen,1,1) grid.addWidget(cargar,1,2) grid.addWidget(self.nombre, 2, 0) grid.addWidget(self.nombreEdit, 2, 1) grid.addWidget(etiquetaSexo,3,0) grid.addWidget(self.botonradio1,3,1) grid.addWidget(self.botonradio2,3,2) grid.addWidget(self.etiquetaCedula,4,0) grid.addWidget(self.cedula,4,1) grid.addWidget(fechaEtiqueta,5,0) grid.addWidget(self.fecha,5,1) grid.addWidget(self.ciudadEtiqueta,6,0) grid.addWidget(self.combo,6,1) grid.addWidget(diasemana,7,0) grid.addWidget(self.lunes,7,1) grid.addWidget(self.martes,7,2) grid.addWidget(self.miercoles,7,3) grid.addWidget(self.jueves,7,4) grid.addWidget(self.viernes,7,5) grid.addWidget(okButton, 8, 0) grid.addWidget(self.label,9,1) grid.addWidget(quit, 10, 1) self.setLayout(grid) #Se definen las segnales de los widgets. #boton salir, procesar y cargar foto self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()')) self.connect(okButton,QtCore.SIGNAL('clicked()'),self.Procesar) self.connect(cargar, QtCore.SIGNAL('clicked()'), self.showDialog) def showDialog(self): #Muestra una ventana de dialogo para abrir un archivo #guarda la ruta del archivo. self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home') #Se define la imagen en la etiqueta pixmap = QtGui.QPixmap("%s" %self.filename) self.imagen.setPixmap(pixmap) def Procesar(self): #Captura la informacion y genera el codigo QR #Define el resultado de los botones de radio if self.botonradio1.isChecked() == True: sexo = "Masculino" elif self.botonradio2.isChecked() == True: sexo = "Femenino" #Se procesa la informacion de los botones de check lista = {} dias = ("Lunes","Martes","Miercoles","Jueves","Viernes") lista["Lunes"] = self.lunes.isChecked() lista["Martes"] = self.martes.isChecked() lista["Miercoles"] = self.miercoles.isChecked() lista["Jueves"] = self.jueves.isChecked() lista["Viernes"] = self.viernes.isChecked() resultado = "" flag = 0 for dia in lista.keys(): for i in dias: if dia == i: if lista[dia] == True: if flag == 0: resultado = dia flag = 1 elif flag == 1: resultado = resultado + ",%s" %dia #Se le da formato a la informacion recabada para generar el codigo QR texto = """ Nombre:%s\n Cedula: %s\n Fecha Nacimiento: %s\n Sexo: %s\n Foto: %s\n Dia de participacion: %s\n """ %(self.nombreEdit.text(), self.cedula.text(), self.fecha.textFromDateTime(self.fecha.dateTime()), sexo, self.filename, resultado) #Se verifica si el archivo del codigo qr no existe, si no se borra if os.path.isfile("./archivosalida.png"): remove("./archivosalida.png") #Se crea la imagen del codigo qr imagen = encode(texto)[2] #Se salva la imagen en un archivo. imagen.save("./archivosalida.png") #Se muestra la imagen en la etiqueta pixmap = QtGui.QPixmap("./archivosalida.png") self.label.setPixmap(pixmap) if __name__ == "__main__": #Se instancia la clase QApplication app = QtGui.QApplication(sys.argv) #Se instancia el objeto QuitButton qb = App() #Se muestra la aplicacion qb.show() #Se sale de la aplicacion sys.exit(app.exec_())La siguiente figura muestra la aplicación al iniciarse:
La siguiente imagen muestra la ventana de dialogo para subir la foto:
La siguiente imagen muestra el formulario con los datos sin generar el código QR:
La siguiente imagen muestra la ventana con la información ya procesada y con el código QR generado:
Por último se muestra la imagen de un celular con Android donde se proceso el código QR y muestra la información del mismo:
No hay comentarios:
Publicar un comentario