[PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr

Iniciado por 0x5d, 15 Mayo 2015, 01:07 AM

0 Miembros y 1 Visitante están viendo este tema.

0x5d

Hola, buen día, luego de meses y meses y meses (na', nunca tanto), de no escribir nada en el Blog, ni mucho menos programar alguna cosilla en PyQT4, he vuelto.

En esta ocasión traigo un Inicio de Sesión basado en el sistema de las antiguas Cajas Fuertes, dónde para ingresar al contenido de dicha caja, necesitabas una combinación de números. Aclaro que esto es solo una prueba de concepto, lo publico solo con dicha intención.

El programa luce así exactamente:


Más abajo explico como funciona, ahora adjunto el código:
Código (python) [Seleccionar]
# -*- coding: utf-8 -*-
'''
Prueba de Concepto sobre Inicio de sesión con Dial de QT4
Autor: JaAViEr | 0x5d
Twitter: https://twitter.com/javieresteban__
Website: http://codigo.ga
'''
from PyQt4 import QtCore, QtGui
import sys
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s

try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)

class Form(QtGui.QWidget):

def __init__(self, parent=None):


estilo_elementos = '''background:qlineargradient(spread:reflect, x1:0.523, y1:0.778, x2:0.545455, y2:0, stop:0 rgba(0, 176, 140, 214), stop:1 rgba(255, 255, 255, 255));
color: #000;padding: 10px;'''
QtGui.QWidget.__init__(self, parent)
self.clave = [220,1, 1000]
self.usuario = "jaavier"
self.intento_clave = []
self.setObjectName(_fromUtf8("self"))
self.setFixedSize(400, 484)
self.setStyleSheet(_fromUtf8("font-weight:bold; font-size: 15px;background:qlineargradient(spread:reflect, x1:0.523, y1:0.778, x2:0.545455, y2:0, stop:0 rgba(0, 176, 140, 214), stop:1 rgba(255, 255, 255, 255));"))
self.gridLayout = QtGui.QGridLayout(self)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.splitter_2 = QtGui.QSplitter(self)
self.splitter_2.setOrientation(QtCore.Qt.Vertical)
self.splitter_2.setObjectName(_fromUtf8("splitter_2"))
self.lcdNumber_numeros = QtGui.QLCDNumber(self.splitter_2)
self.lcdNumber_numeros.setObjectName(_fromUtf8("lcdNumber_numeros"))
self.lcdNumber_numeros.setStyleSheet(estilo_elementos)
self.dial_contrasena = QtGui.QDial(self.splitter_2)
self.dial_contrasena.setMaximum(1000)
self.dial_contrasena.setStyleSheet("background: rgb(85, 255, 255)")
self.dial_contrasena.setObjectName(_fromUtf8("dial_contrasena"))
self.gridLayout.addWidget(self.splitter_2, 3, 0, 1, 1)
self.label_usuario = QtGui.QLabel(self)
self.label_usuario.setStyleSheet(_fromUtf8("font-weight:bold; font-size: 15px;"))
self.label_usuario.setObjectName(_fromUtf8("label_usuario"))
self.label_usuario.setStyleSheet("background: transparent")
self.gridLayout.addWidget(self.label_usuario, 0, 0, 1, 1)
self.lineEdit_usuario = QtGui.QLineEdit(self)
self.lineEdit_usuario.setStyleSheet(estilo_elementos)
self.lineEdit_usuario.setObjectName(_fromUtf8("lineEdit_usuario"))
self.gridLayout.addWidget(self.lineEdit_usuario, 1, 0, 1, 1)
self.label_contrasena = QtGui.QLabel(self)
self.label_contrasena.setObjectName(_fromUtf8("label_contrasena"))
self.label_contrasena.setStyleSheet("background: transparent")
self.gridLayout.addWidget(self.label_contrasena, 2, 0, 1, 1)
self.pushButton_reiniciar = QtGui.QPushButton(self)
self.pushButton_reiniciar.setObjectName(_fromUtf8("pushButton_reiniciar"))
self.gridLayout.addWidget(self.pushButton_reiniciar, 4, 0, 1, 1)
self.pushButton_reiniciar.setStyleSheet(estilo_elementos)
self.renombrarObjetos()
QtCore.QObject.connect(self.dial_contrasena, QtCore.SIGNAL(_fromUtf8("valueChanged(int)")), self.lcdNumber_numeros.display)
QtCore.QObject.connect(self.pushButton_reiniciar, QtCore.SIGNAL(_fromUtf8("clicked()")), self.limpiar_campos)
QtCore.QMetaObject.connectSlotsByName(self)

def limpiar_campos(self):

self.lineEdit_usuario.setText("")
self.intento_clave = []
self.dial_contrasena.setValue(0)
mensaje_reinicio = QtGui.QMessageBox()
mensaje_reinicio.setText(_fromUtf8("Formulario reiniciado con éxito"))

def keyPressEvent(self, evento):

tecla = evento.key()

if tecla == 32:

usuario = str(self.lineEdit_usuario.text())
self.intento_clave.append(int(self.lcdNumber_numeros.value()))
self.dial_contrasena.setValue(0)
if self.intento_clave == self.clave and usuario == self.usuario:

mensaje = QtGui.QMessageBox()
mensaje.setText("Bienvenido, " + usuario)
mensaje.exec_()
self.limpiar_campos()

def renombrarObjetos(self):

self.setWindowTitle(_translate("self", "Iniciar Sesión :: WWW.CODIGO.GA", None))
self.label_usuario.setText(_translate("self", "Usuario", None))
self.label_contrasena.setText(_translate("self", "Contraseña", None))
self.pushButton_reiniciar.setText(_translate("self", "Reiniciar campos", None))

app = QtGui.QApplication(sys.argv)
formulario = Form()
formulario.show()
app.exec_()

Bien, dentro del código, específicamente en las líneas 32 y 33 tenemos dos variables:
Código (python) [Seleccionar]

self.clave = [220,1, 1000]
self.usuario = "jaavier"

Como vemos, self.usuario es la variable de nuestro usuario válido y self.clave es una Lista, cuyo valor es [220, 1, 1000], lo que quiere decir que esa es nuestra combinación para ingresar de forma correcta. En ves de 3 dígitos en la combinación, pueden ser los que se te antojen.


Para ingresar nuestra combinación (220, 1, 1000), es necesario utilizar nuestro cursor e ir moviendo la "perilla" (QDial), a medida que vayamos moviendo esta, el valor se irá viendo en la pantalla estilo "LCD" en la parte superior. Cuando hayas encontrado los números de tu combinación, debes presionar la tecla "Espacio", de esta forma le decimos al programa que el número que vemos en el LCD, forma parte de nuestra combinación, una vez hecho esto con la primera cifra, el QDial vuelve a 0, lo que quiere decir que ahora debes buscar el segundo número de tu combinación, presionar espacio y así lo mismo con el tercer, cuarto, quinto, etc dígito.

Si la combinación resulta correcta, deberías obtener algo como esto:



Fuente: http://codigo.ga/python/pyqt4-inicio-de-sesion-estilo-caja-fuerte/

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !