Siguiendo con las prácticas en PyQT4, traigo una aplicación "juego" que luce así:
Enseguida explico más o menos en que consiste.
La aplicación se encarga de generar Números/Letras/Números y Letras (según cada gusto) de forma totalmente aleatoria, con la longitud que tu desees. Además de seleccionar un tiempo "límite" para memorizar el valor generado, una vez acabado este tiempo límite, el valor es oculto, para que tu escribas la respuesta y evaluar si lo que memorizaste corresponde realmente a la cifra que generó y mostró por los X segundos que lo configuraste.
Una vez lanzada la aplicación y configurada, damos clic en ¡Establecer Configuración! , lo que nos da un nuevo cuadro, que luce así:
Damos clic en "Comenzar" y tendremos esto:
Una vez acabado el tiempo, el QLineEdit se resetea para que ingreses lo que memorizaste:
Una vez ingresado el valor que memorizaste, presiona ENTER, si el valor fue correcto, entonces tu racha aumentará en +1 , de lo contrario se reiniciará a 0.
Sin más que agregar, el código:
Código
# -*- coding: utf-8 -*- ''' Juego Memoriza :: Entrenando tu Memoria Autor: JaAViEr | 0x5d Twitter: https://twitter.com/javieresteban__ Website: http://codigo.ga ''' from PyQt4 import QtCore, QtGui import sys from random import randint, sample import threading from time import sleep 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 formA(QtGui.QWidget): def __init__(self, parent=None): self.largo = 4 QtGui.QWidget.__init__(self, parent) self.resize(359, 131) self.gridLayout = QtGui.QGridLayout(self) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.tabWidget_inicial = QtGui.QTabWidget(self) self.tabWidget_inicial.setStyleSheet(_fromUtf8("font-weight:bold;")) self.tabWidget_inicial.setObjectName(_fromUtf8("tabWidget_inicial")) self.tab = QtGui.QWidget() self.tab.setObjectName(_fromUtf8("tab")) self.gridLayout_2 = QtGui.QGridLayout(self.tab) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.label_tipo = QtGui.QLabel(self.tab) self.label_tipo.setObjectName(_fromUtf8("label_tipo")) self.gridLayout_2.addWidget(self.label_tipo, 0, 2, 1, 1) self.pushButton_comenzar = QtGui.QPushButton(self.tab) self.pushButton_comenzar.setObjectName(_fromUtf8("pushButton_comenzar")) self.gridLayout_2.addWidget(self.pushButton_comenzar, 2, 0, 1, 3) self.spinBox_largo = QtGui.QSpinBox(self.tab) self.spinBox_largo.setMinimum(1) self.spinBox_largo.setProperty("value", 4) self.spinBox_largo.setObjectName(_fromUtf8("spinBox_largo")) self.gridLayout_2.addWidget(self.spinBox_largo, 1, 0, 1, 1) self.comboBox_tipo = QtGui.QComboBox(self.tab) self.comboBox_tipo.setObjectName(_fromUtf8("comboBox_tipo")) self.comboBox_tipo.addItem(_fromUtf8("")) self.comboBox_tipo.addItem(_fromUtf8("")) self.comboBox_tipo.addItem(_fromUtf8("")) self.gridLayout_2.addWidget(self.comboBox_tipo, 1, 2, 1, 1) self.label_largo = QtGui.QLabel(self.tab) self.label_largo.setObjectName(_fromUtf8("label_largo")) self.gridLayout_2.addWidget(self.label_largo, 0, 0, 1, 1) self.label_tiempo = QtGui.QLabel(self.tab) self.label_tiempo.setObjectName(_fromUtf8("label_tiempo")) self.gridLayout_2.addWidget(self.label_tiempo, 0, 1, 1, 1) self.spinBox_tiempo = QtGui.QSpinBox(self.tab) self.spinBox_tiempo.setPrefix(_fromUtf8("")) self.spinBox_tiempo.setObjectName(_fromUtf8("spinBox_tiempo")) self.spinBox_tiempo.setMinimum(1) self.gridLayout_2.addWidget(self.spinBox_tiempo, 1, 1, 1, 1) self.tabWidget_inicial.addTab(self.tab, _fromUtf8("")) self.gridLayout.addWidget(self.tabWidget_inicial, 0, 0, 1, 1) self.valores_elementos() self.connect(self.pushButton_comenzar, QtCore.SIGNAL("clicked()"), self.establecer_configuracion) def establecer_configuracion(self): self.tiempo = int(self.spinBox_tiempo.value()) self.largo = int(self.spinBox_largo.value()) form_b.show() form_b.label_segundos_restantes.setText("%s segundos" % self.tiempo) def valores_elementos(self): self.setWindowTitle(_translate("self", "Memoriza :: www.codigo.ga", None)) self.label_tipo.setText(_translate("self", "Tipo de juego", None)) self.pushButton_comenzar.setText(_translate("self", "¡Establecer configuración!", None)) self.comboBox_tipo.setItemText(0, _fromUtf8("Números")) self.comboBox_tipo.setItemText(1, _translate("self", "Letras", None)) self.comboBox_tipo.setItemText(2, _translate("self", "Números y Letras", None)) self.label_largo.setText(_translate("self", "Largo", None)) self.label_tiempo.setText(_translate("self", "Tiempo para memorizar", None)) self.spinBox_tiempo.setSuffix(_fromUtf8(" segundos")) self.tabWidget_inicial.setTabText(self.tabWidget_inicial.indexOf(self.tab), _translate("self", "Configuración de Memoriza", None)) class formB(QtGui.QWidget): def __init__(self, parent=None): self.valor_generado = "" self.racha = 0 QtGui.QWidget.__init__(self, parent) self.setObjectName(_fromUtf8("self")) self.resize(215, 104) self.gridLayout = QtGui.QGridLayout(self) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.splitter = QtGui.QSplitter(self) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName(_fromUtf8("splitter")) self.label_memoriza = QtGui.QLabel(self.splitter) self.label_memoriza.setStyleSheet(_fromUtf8("font-weight: bold; font-size: 17px;")) self.label_memoriza.setObjectName(_fromUtf8("label_memoriza")) self.lineEdit_valor_memorizar = QtGui.QLineEdit(self.splitter) self.lineEdit_valor_memorizar.setReadOnly(True) self.lineEdit_valor_memorizar.setObjectName(_fromUtf8("lineEdit_valor_memorizar")) self.gridLayout.addWidget(self.splitter, 0, 0, 1, 2) self.label_tiempo_restante = QtGui.QLabel(self) self.label_tiempo_restante.setObjectName(_fromUtf8("label_tiempo_restante")) self.gridLayout.addWidget(self.label_tiempo_restante, 1, 0, 1, 1) self.label_segundos_restantes = QtGui.QLabel(self) self.label_segundos_restantes.setStyleSheet(_fromUtf8("font-style: italic; font-weight: bold;")) self.label_segundos_restantes.setObjectName(_fromUtf8("label_segundos_restantes")) self.gridLayout.addWidget(self.label_segundos_restantes, 1, 1, 1, 1) self.pushButton_comenzar = QtGui.QPushButton(self) self.pushButton_comenzar.setObjectName(_fromUtf8("pushButton_comenzar")) self.gridLayout.addWidget(self.pushButton_comenzar, 3, 0, 1, 2) self.label_racha = QtGui.QLabel(self) self.label_racha.setObjectName(_fromUtf8("label_racha")) self.gridLayout.addWidget(self.label_racha, 2, 0, 1, 1) self.label_valor_racha = QtGui.QLabel(self) self.label_valor_racha.setStyleSheet(_fromUtf8("font-weight: bold;")) self.label_valor_racha.setObjectName(_fromUtf8("label_valor_racha")) self.gridLayout.addWidget(self.label_valor_racha, 2, 1, 1, 1) self.connect(self.pushButton_comenzar, QtCore.SIGNAL("clicked()"), self.empezar) self.connect(self.pushButton_comenzar, QtCore.SIGNAL("returnPressed()"), self.empezar) self.connect(self.lineEdit_valor_memorizar, QtCore.SIGNAL("returnPressed()"), self.cambia_valor) self.renombrar_elementos_widget() QtCore.QMetaObject.connectSlotsByName(self) def cambia_valor(self): qstring = str(self.lineEdit_valor_memorizar.text()) # mensaje = QtGui.QMessageBox() if qstring == self.valor_generado and len(self.valor_generado) > 0 and len(qstring) > 0: # mensaje.setText(_fromUtf8("¡Respuesta correcta!")) self.pushButton_comenzar.setFocus(True) self.lineEdit_valor_memorizar.setText("") self.valor_generado = False self.racha = self.racha + 1 self.label_valor_racha.setText(str(self.racha)) self.empezar() else: self.lineEdit_valor_memorizar.setText("") self.valor_generado = False # mensaje.setText(_fromUtf8("¡Respuesta Incorrecta!")) self.racha = 0 self.correr = False self.label_valor_racha.setText("0") self.empezar() # mensaje.exec_() def generar_numero(self): valor = "" for i in range(form_a.largo,): valor = valor + str(randint(0, 9)) return valor def generar_letras(self): valor = "" lista = list("abcdefghijklmnopqrstuvwxyz") len_lista = len(lista) - 1 for i in range(form_a.largo): valor = valor + lista[randint(0,len_lista)] return valor def generar_alfanumerico(self): valor = "" lista_abc = list("abcdefghijklmnopqrstuvwxyz") lista_digitos = list("0123456789") largo = form_a.largo / 2 len_lista_abc = len(lista_abc) - 1 len_lista_digitos = len(lista_digitos) - 1 for i in range(largo): valor = valor + lista_abc[randint(0,len_lista_abc)] for i in range(largo): valor = valor + lista_digitos[randint(0,len_lista_digitos)] return ''.join(sample(valor, len(valor))) def empezar(self): opcion = form_a.comboBox_tipo.currentIndex() self.lineEdit_valor_memorizar.setReadOnly(True) if opcion == 0: self.valor_generado = self.generar_numero() self.lineEdit_valor_memorizar.setText(self.valor_generado) elif opcion == 1: self.valor_generado = self.generar_letras() self.lineEdit_valor_memorizar.setText(self.valor_generado) elif opcion == 2: self.valor_generado = self.generar_alfanumerico() self.lineEdit_valor_memorizar.setText(self.valor_generado) t = Timer() t.start() def renombrar_elementos_widget(self): self.setWindowTitle(_translate("self", "Tablero", None)) self.label_memoriza.setText(_translate("self", "<html><head/><body><p align=\"center\"><span style=\" font-size:13pt;\">Memoriza</span></p></body></html>", None)) self.lineEdit_valor_memorizar.setText(_translate("self", "", None)) self.label_tiempo_restante.setText(_translate("self", "Tiempo restante", None)) self.label_segundos_restantes.setText(_translate("self", "10 segundos", None)) self.label_racha.setText(_translate("self", "Racha", None)) self.label_valor_racha.setText(_translate("self", "0", None)) self.pushButton_comenzar.setText(_translate("self", "Comenzar", None)) class Timer(threading.Thread): def __init__(self, parent=None): threading.Thread.__init__(self, parent) def run(self): tiempo_restante = form_a.tiempo for i in range(form_a.tiempo): form_b.label_segundos_restantes.setText("%s segundos" % tiempo_restante) tiempo_restante = tiempo_restante - 1 sleep(1) form_b.label_segundos_restantes.setText("0 segundos") form_b.lineEdit_valor_memorizar.setText("") form_b.lineEdit_valor_memorizar.setReadOnly(False) form_b.lineEdit_valor_memorizar.setFocus(True) app = QtGui.QApplication(sys.argv) form_b = formB() form_a = formA() form_a.show() app.exec_()
Fuente: http://codigo.ga/python/pyqt4-memoriza-entrenando-la-memoria/
Saludos, Javier.