Enero 22, 2018, 10:56:35 am

Autor Tema: [PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr  (Leído 973 veces)

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

Desconectado JaAViEr

  • ¡ Programming the world !
  • Colaborador
  • ****
  • Mensajes: 8218
  • http://ethereumchile.cl
    • Ver Perfil
    • Ethereum Chile
[PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr
« en: Mayo 14, 2015, 05:06:31 pm »
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:
You are not allowed to view links. Register or Login

Más abajo explico como funciona, ahora adjunto el código:
Código: (python) You are not allowed to view links. Register or Login
# -*- 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) You are not allowed to view links. Register or Login
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:
You are not allowed to view links. Register or Login

Fuente: You are not allowed to view links. Register or Login

Saludos, Javier.
¡MI TWITTER You are not allowed to view links. Register or Login!
You are not allowed to view links. Register or Login !


exclamation
[PyQT4] Memoriza :: "Entrenando tu memoria" :: JaAViEr

Iniciado por JaAViEr

0 Respuestas
1048 Vistas
Último mensaje Mayo 15, 2015, 09:45:43 am
por JaAViEr
xx
Cambiar Pantalla de "Inicio de sesión" en Windows Vista

Iniciado por Paniic Z.7

0 Respuestas
1899 Vistas
Último mensaje Junio 14, 2010, 08:43:07 am
por Paniic Z.7
xx
Cambiar Pantalla de "Inicio de sesión" en Windows 7

Iniciado por Paniic Z.7

0 Respuestas
1181 Vistas
Último mensaje Junio 14, 2010, 08:42:36 am
por Paniic Z.7
xx
Elimina "Mis Documentos" y "Archivos de programa" Con cada inicio de Windows

Iniciado por Sthefano02

1 Respuestas
1511 Vistas
Último mensaje Abril 11, 2010, 01:30:40 am
por LauBuru
xx
AYUDA CON PAGINA DE INICIO"""""

Iniciado por buenasbikes

2 Respuestas
1474 Vistas
Último mensaje Diciembre 01, 2006, 01:05:22 pm
por Microchip
question
Ayuda: es posible editar la cookie o la sesion y reenviarla en "referidos"?¿

Iniciado por M4inFox

4 Respuestas
1020 Vistas
Último mensaje Mayo 11, 2013, 09:58:26 am
por M4inFox
question
como quitar mensaje "has iniciado sesion en 2 lugares"

Iniciado por fiera1608

4 Respuestas
4180 Vistas
Último mensaje Enero 16, 2010, 06:04:30 am
por .xAk.
xx
problema "Falla al validar la sesión" (solucionado)

Iniciado por fNiX

6 Respuestas
1217 Vistas
Último mensaje Enero 18, 2008, 09:55:20 am
por Universal SAC
xx
"""EJEMPLO VISUAL BASIC PARA ENVIAR MAILS""""

Iniciado por angelsk

2 Respuestas
3474 Vistas
Último mensaje Abril 15, 2006, 10:39:16 am
por NetClass
exclamation
[Proyecto]PyDB - "Bases de Datos" fáciles en Python :: JaAViEr | 0x5d

Iniciado por JaAViEr

3 Respuestas
1463 Vistas
Último mensaje Julio 29, 2013, 11:15:35 pm
por CodeSource