# -*- coding: UTF-8 -*- """Desarrollo de un Dictado Robotizida o_0""" """en proceso""" #written by: # Walter. D. Vargas # Yuri González import pygtk import gtk import subprocess import glib import logging _logger = logging.getLogger() _logger.setLevel(logging.DEBUG) class Dictado: def __init__(self): #main window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self._delete_event_cb) self.window.set_title("Dictado") self.window.set_border_width(10) self.word = "" #levels self.words = [] self.nivel = [] self.correctos = [] #left container self.contenedor_izq = gtk.VBox() self.label_theme = gtk.Label("Dictado de Palabras") self.contenedor_izq.pack_start(self.label_theme, False, False, 10) self.label_theme.show() self.imagen_principal = gtk.Image() self.imagen_principal.set_from_file("resources/level_1/1.png") self.contenedor_izq.pack_start(self.imagen_principal, False, False, 50) self.imagen_principal.show() self.comenzar_dictado = gtk.Button(" Comenzar Dictado ") self.comenzar_dictado.set_sensitive(1) self.comenzar_dictado.connect("clicked", self._dictar_cb) self.cancelar = gtk.Button(" Cancelar ") self.cancelar.set_sensitive(0) self.cancelar.connect("clicked", self._cancela_cb, 0) self.opciones = gtk.HBox() self.opciones.pack_start(self.comenzar_dictado, False, False, 50) self.opciones.pack_start(self.cancelar, False, False, 50) self.comenzar_dictado.show() self.cancelar.show() self.contenedor_izq.pack_start(self.opciones, False, False, 50) self.opciones.show() self.hbox_repeat = gtk.HBox() self.repetir = gtk.Button(" Repetir Palabra ") self.repetir.set_sensitive(0) self.repetir.connect("clicked", self._repeat_cb) self.hbox_repeat.pack_start(self.repetir, False, False, 50) self.repetir.show() self.jugar_again = gtk.Button(" Volver a Jugar ") self.jugar_again.connect("clicked", self._again_cb) self.jugar_again.set_sensitive(0) self.hbox_repeat.pack_start(self.jugar_again, False, False, 50) self.jugar_again.show() self.contenedor_izq.pack_start(self.hbox_repeat, False, False, 50) self.hbox_repeat.show() #self.imagen_principal = gtk.Image() #Aqui va entry y aceptar self.hbox = gtk.HBox() self.texto = gtk.Entry(200) self.texto.set_sensitive(0) self.hbox.pack_start(self.texto, False, False, 70) self.texto.show() self.word = self.texto self.aceptar = gtk.Button(" Aceptar ") self.aceptar.set_sensitive(0) self.aceptar.connect("clicked", self._aceptar_cb) self.hbox.pack_start(self.aceptar, False, False, 70) self.aceptar.show() self.contenedor_izq.pack_start(self.hbox, False, False, 10) self.hbox.show() #end left container #begining container right self.contenedor_der = gtk.VBox() self.label_info = gtk.Label("Inicio de Juego") self.label_info.set_sensitive(1) self.contenedor_der.pack_start(self.label_info, False, False, 10) self.label_info.show() self.label_correct = gtk.Label("Palabras Acertadas") self.contenedor_der.pack_start(self.label_correct, False, False, 10) self.label_correct.show() self.list_correct = gtk.TextView() self.list_correct.set_editable(False) self.list_correct.set_cursor_visible(False) self.buffer = self.list_correct.get_buffer() self.buffer.set_text("Ninguna") self.contenedor_der.pack_start(self.list_correct, False, False, 10) self.list_correct.show() self.salir = gtk.Button(" Salir ") self.salir.connect("clicked", self._salir_cb) self.contenedor_der.pack_start(self.salir, False, False, 40) self.salir.show() #container with container right and left self.hbox = gtk.HBox() self.hbox.pack_start(self.contenedor_izq, False, False, 0) self.hbox.pack_start(self.contenedor_der, False, False, 0) self.contenedor_izq.show() self.contenedor_der.show() self.window.add(self.hbox) self.hbox.show() self.window.show() self.num_clic = 0 self.aciertos = 0 def _cambiar_imagen(self, level, img): ruta = "resources/level_%s/%s.png" % (level, img) self.imagen_principal.set_from_file(ruta) def _again_cb(self, widget): self._activa_desactiva_cb(1) self._act_desact_operacion_cb(0) widget.set_sensitive(0) self.label_info.set_label("Inicio del Juego") def _repeat_cb(self, widget): subprocess.call("espeak -s 100 -v es-sc --stdout %s | aplay" % self.word, shell=True) #autoFunction def _autocall_cb(self, time, widget): glib.timeout_add(time, self._pc, widget) #machine's action def _pc(self, widget): if self.num_clic < (len(self.words)): self.word = self.words[self.num_clic] #Asigno el valor a una variable, e introduzco ésta a los métodos subprocess.call("espeak -s 100 -v es-sc --stdout %s | aplay" % self.word, shell=True) else: if self.aciertos == len(self.words): if self.nivel != 3: self.nivel += 1 self._write_cb("nivel.txt", str(self.nivel)) self.aciertos = 0 self.num_clic = 0 self.comenzar_dictado.set_sensitive(1) self.cancelar.set_sensitive(0) self._act_desact_operacion_cb(0) subprocess.call("espeak -s 130 -v es-sc --stdout 'Has Avanzado al siguiente Nivel' | aplay", shell=True) self.label_info.set_text("¡Has Avanzado al Siguiente Nivel!") for i in self.correctos: self.buffer.set_text(i) del self.correctos[:] else: for i in self.correctos: self.buffer.set_text(i) #subprocess.call("espeak -s 130 -v es-sc --stdout 'Enhorabuena, Felicidades has concluido el dictado muy bien' | aplay" % self.words[(self.num_clic)-1], shell=True) subprocess.call("espeak -s 130 -v es-sc --stdout 'Enhorabuena, Felicidades has concluido el dictado muy bien' | aplay", shell=True) self.label_info.set_label("¡Has Concluido Exitosamente!") self._write_cb("nivel.txt", str(1)) self.aciertos = 0 self.num_clic = 0 self.cancelar.set_sensitive(0) self._act_desact_operacion_cb(0) self.jugar_again.set_sensitive(1) del self.correctos[:] else: for i in self.correctos: self.buffer.set_text(i) subprocess.call("espeak -s 130 -v es-sc --stdout 'no avanzaste al siguiente nivel' | aplay", shell=True) self.label_info.set_text("¡Has Fallado!") self.num_clic = 0 self.aciertos = 0 self._act_desact_operacion_cb(0) self.cancelar.set_sensitive(0) self.comenzar_dictado.set_sensitive(1) del self.correctos[:] def _aceptar_cb(self, widget, data=None): if self.texto.get_text() != "": self.num_clic += 1 if self.texto.get_text() == self.words[(self.num_clic) - 1]: subprocess.call("espeak -s 130 -v es-sc --stdout 'correcto, has escrito bien la palabra %s' | aplay" % self.words[(self.num_clic) - 1], shell=True) self._autocall_cb(100, self.aceptar)#3 es tiempo self.texto.set_text("") self.aciertos += 1 self.correctos.append(self.words[(self.num_clic - 1)]) else: #self.num_clic -= 1 subprocess.call("espeak -s 130 -v es-sc --stdout 'error, escribiste mal la palabra' | aplay", shell=True) self._autocall_cb(100, self.aceptar) self.texto.set_text("") def _dictar_cb(self, widget, data=None): self.cancelar.set_sensitive(1) self.comenzar_dictado.set_sensitive(False) self._act_desact_operacion_cb(1) self.nivel = self._open_nivel("nivel.txt") self.nivel = int(self.nivel[0]) if self.nivel == 1: self.label_info.set_label("Nivel 1") self.words = self._open_file("1a.txt") self._cambiar_imagen(1, 1) self.word = self.words[0] subprocess.call("espeak -s 100 -v es-sc --stdout %s | aplay" % self.words[0], shell=True) elif self.nivel == 2: self.label_info.set_label("Nivel 2") self.words = self._open_file("1b.txt") self._cambiar_imagen(2, 2) self.word = self.words[0] subprocess.call("espeak -s 100 -v es-sc --stdout %s | aplay" % self.words[0], shell=True) else: self.label_info.set_label("Nivel 3") self.words = self._open_file("1c.txt") self._cambiar_imagen(3, 3) self.word = self.words[0] subprocess.call("espeak -s 100 -v es-sc --stdout %s | aplay" % self.words[0], shell=True) def _activa_desactiva_cb(self, i): self.comenzar_dictado.set_sensitive(i) #self.cancelar.set_sensitive(i) def _act_desact_operacion_cb(self, i): self.texto.set_sensitive(i) self.aceptar.set_sensitive(i) self.repetir.set_sensitive(i) def _cancela_cb(self, widget, i ): self.label_info.set_text("Inicio del Juego") self._activa_desactiva_cb(1) self._act_desact_operacion_cb(0) self.cancelar.set_sensitive(0) self.num_clic = 0 #self.palabra.set_text("") def _open_nivel(self, file): line = [] with open(file, "r") as file: line.append((file.readline()).strip()) return line def _open_file(self, file): list = [] with open(file, "r") as file: list1 = file.readlines() for i in list1: list.append(i.strip()) return list def _write_cb(self, file, x): with open(file, "w") as file: file.write(x) def _delete_event_cb(self, widget, event, data=None): gtk.main_quit() return False def _salir_cb(self, widget, data=None): gtk.main_quit() return False def main(self): gtk.main() return 0 if __name__=="__main__": d = Dictado() d.main()