elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr  (Leído 1,941 veces)
0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
[PyQT4] Inicio de Sesión estilo "Caja Fuerte" :: JaAViEr
« en: 15 Mayo 2015, 01:07 am »

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
  1. # -*- coding: utf-8 -*-
  2. '''
  3. Prueba de Concepto sobre Inicio de sesión con Dial de QT4
  4. Autor: JaAViEr | 0x5d
  5. Twitter: https://twitter.com/javieresteban__
  6. Website: http://codigo.ga
  7. '''
  8. from PyQt4 import QtCore, QtGui
  9. import sys
  10. try:
  11. _fromUtf8 = QtCore.QString.fromUtf8
  12. except AttributeError:
  13. def _fromUtf8(s):
  14. return s
  15.  
  16. try:
  17. _encoding = QtGui.QApplication.UnicodeUTF8
  18. def _translate(context, text, disambig):
  19. return QtGui.QApplication.translate(context, text, disambig, _encoding)
  20. except AttributeError:
  21. def _translate(context, text, disambig):
  22. return QtGui.QApplication.translate(context, text, disambig)
  23.  
  24. class Form(QtGui.QWidget):
  25.  
  26. def __init__(self, parent=None):
  27.  
  28.  
  29. 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));
  30. color: #000;padding: 10px;'''
  31. QtGui.QWidget.__init__(self, parent)
  32. self.clave = [220,1, 1000]
  33. self.usuario = "jaavier"
  34. self.intento_clave = []
  35. self.setObjectName(_fromUtf8("self"))
  36. self.setFixedSize(400, 484)
  37. 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));"))
  38. self.gridLayout = QtGui.QGridLayout(self)
  39. self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
  40. self.splitter_2 = QtGui.QSplitter(self)
  41. self.splitter_2.setOrientation(QtCore.Qt.Vertical)
  42. self.splitter_2.setObjectName(_fromUtf8("splitter_2"))
  43. self.lcdNumber_numeros = QtGui.QLCDNumber(self.splitter_2)
  44. self.lcdNumber_numeros.setObjectName(_fromUtf8("lcdNumber_numeros"))
  45. self.lcdNumber_numeros.setStyleSheet(estilo_elementos)
  46. self.dial_contrasena = QtGui.QDial(self.splitter_2)
  47. self.dial_contrasena.setMaximum(1000)
  48. self.dial_contrasena.setStyleSheet("background: rgb(85, 255, 255)")
  49. self.dial_contrasena.setObjectName(_fromUtf8("dial_contrasena"))
  50. self.gridLayout.addWidget(self.splitter_2, 3, 0, 1, 1)
  51. self.label_usuario = QtGui.QLabel(self)
  52. self.label_usuario.setStyleSheet(_fromUtf8("font-weight:bold; font-size: 15px;"))
  53. self.label_usuario.setObjectName(_fromUtf8("label_usuario"))
  54. self.label_usuario.setStyleSheet("background: transparent")
  55. self.gridLayout.addWidget(self.label_usuario, 0, 0, 1, 1)
  56. self.lineEdit_usuario = QtGui.QLineEdit(self)
  57. self.lineEdit_usuario.setStyleSheet(estilo_elementos)
  58. self.lineEdit_usuario.setObjectName(_fromUtf8("lineEdit_usuario"))
  59. self.gridLayout.addWidget(self.lineEdit_usuario, 1, 0, 1, 1)
  60. self.label_contrasena = QtGui.QLabel(self)
  61. self.label_contrasena.setObjectName(_fromUtf8("label_contrasena"))
  62. self.label_contrasena.setStyleSheet("background: transparent")
  63. self.gridLayout.addWidget(self.label_contrasena, 2, 0, 1, 1)
  64. self.pushButton_reiniciar = QtGui.QPushButton(self)
  65. self.pushButton_reiniciar.setObjectName(_fromUtf8("pushButton_reiniciar"))
  66. self.gridLayout.addWidget(self.pushButton_reiniciar, 4, 0, 1, 1)
  67. self.pushButton_reiniciar.setStyleSheet(estilo_elementos)
  68. self.renombrarObjetos()
  69. QtCore.QObject.connect(self.dial_contrasena, QtCore.SIGNAL(_fromUtf8("valueChanged(int)")), self.lcdNumber_numeros.display)
  70. QtCore.QObject.connect(self.pushButton_reiniciar, QtCore.SIGNAL(_fromUtf8("clicked()")), self.limpiar_campos)
  71. QtCore.QMetaObject.connectSlotsByName(self)
  72.  
  73. def limpiar_campos(self):
  74.  
  75. self.lineEdit_usuario.setText("")
  76. self.intento_clave = []
  77. self.dial_contrasena.setValue(0)
  78. mensaje_reinicio = QtGui.QMessageBox()
  79. mensaje_reinicio.setText(_fromUtf8("Formulario reiniciado con éxito"))
  80.  
  81. def keyPressEvent(self, evento):
  82.  
  83. tecla = evento.key()
  84.  
  85. if tecla == 32:
  86.  
  87. usuario = str(self.lineEdit_usuario.text())
  88. self.intento_clave.append(int(self.lcdNumber_numeros.value()))
  89. self.dial_contrasena.setValue(0)
  90. if self.intento_clave == self.clave and usuario == self.usuario:
  91.  
  92. mensaje = QtGui.QMessageBox()
  93. mensaje.setText("Bienvenido, " + usuario)
  94. mensaje.exec_()
  95. self.limpiar_campos()
  96.  
  97. def renombrarObjetos(self):
  98.  
  99. self.setWindowTitle(_translate("self", "Iniciar Sesión :: WWW.CODIGO.GA", None))
  100. self.label_usuario.setText(_translate("self", "Usuario", None))
  101. self.label_contrasena.setText(_translate("self", "Contraseña", None))
  102. self.pushButton_reiniciar.setText(_translate("self", "Reiniciar campos", None))
  103.  
  104. app = QtGui.QApplication(sys.argv)
  105. formulario = Form()
  106. formulario.show()
  107. app.exec_()
Bien, dentro del código, específicamente en las líneas 32 y 33 tenemos dos variables:
Código
  1. self.clave = [220,1, 1000]
  2. self.usuario = "jaavier"
  3.  
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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines