{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Ayudantía 3\n",
    "\n",
    "### Interfaces Gráficas I 💻🖼️"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    " ## Ayudantes  👾\n",
    "- [Clemente Campos](https://github.com/mskdancers)\n",
    "- [Patricio Hinostroza](https://github.com/Dvckhv)\n",
    "- [Julio Huerta](https://github.com/julius)\n",
    "- [Carlos Olguin](https://github.com/CarlangaUC)\n",
    "- [Catalina Miranda](https://github.com/catalinamirandah)\n",
    "- [Felipe Vidal](https://github.com/fvidalf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    " ## 📖 Contenidos 📖\n",
    " \n",
    " #### En este ayudantía usaremos:\n",
    " \n",
    " - Elementos gráficos básicos\n",
    " - Eventos y señales\n",
    " - Diseño front-back"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### RECORDAR\n",
    "\n",
    "Recuerden que para la correcta realización de todo lo relacionado a interfaces gráficas, empleamos el modulo `PyQt6`, así que asegúrate de haberlo instalado correctamente 🤔🤔"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## DCCastillo !\n",
    "\n",
    "Como gran conocedor de PyQt6 y clases (obviamente), se te ha encomedado completar una aplicación que emplea conceptos de PyQt6 y demás. Deberás rellenar ciertos métodos que no están completos en el frontend, además de completar otros en el backend. Junto a todo esto deberás rellenar cierta conexión con señales que no se realizaron y demás, más en específico:\n",
    "\n",
    "\n",
    "En ```main.py```:\n",
    "\n",
    "Conectar las señales con su correspondiente método (están las pistas en cada clase)\n",
    "\n",
    "En ```ventana_principal.py```, crear 3 botones que deberán ser añadidos a la layout que está planteada:\n",
    "\n",
    "    - PushButton Dormitorio : Deberás conectarlo para que se cierra la ventana y abra la ventana del dormitorio\n",
    "    - PushButton Baño : Deberás conectarlo para que se cierra la ventana y abra la ventana del baño\n",
    "    - PushButton Salir del castillo : Deberás hacer que al apretarlo se cierre la ventana\n",
    "\n",
    "En ```logica.py```:\n",
    "\n",
    "Deberás rellenar el método:\n",
    "- ```ver_dormir(self,hora) ```: Este método recibe un string ```hora``` de la forma ```\"Hora:Minutos\"``` de manera que debera emitir la señal ```senal_ver_dormir``` en el caso que Hora sea mayor a las 20 o sea mayor a 0 y menor a las 5."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## DCCrush&Smash \n",
    "#### (Actividad original de [2022-1](https://github.com/IIC2233/Syllabus-2022-1/tree/main/Actividades/AS3))\n",
    "\n",
    "Estamos haciendo una versión propia del popular juego \"Whac-A-Mole\"! Bueno, en realidad, casi todo el juego ya está hecho 😅, solo falta construir la ventana inicial del juego, la ventana de *login*.\n",
    "\n",
    "Para esto, debemos completar la clase ```VentanaInicio``` dentro del archivo  ```frontend/ventana_inicio.py``` de acuerdo a los siguientes requerimientos..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Métodos a completar"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- ```__init__(self)```: Debe inicializar la ventana correctamente, estableciendo además su tamaño y llamar al método encargado de inicializar sus elementos."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- ```crear_elementos(self)```: Este método estará encargado de crear todos los elementos necesario de la ventana de *login*. Para ello, se deben crear...\n",
    "    - Un QLabel para el logo del juego. La ruta de la imagen está contenida en parametros.py\n",
    "    - Un QLabel que le indique al usuario ingresar su nombre.\n",
    "    - Un QLineEdit para que el usuario ingrese su nombre.\n",
    "    - Un QLabel que le indique al usuario ingresar su contraseña.\n",
    "    - Un QLineEdit para que el usuario ingrese su contraseña.\n",
    "    - Un QPushButton para enviar la información del *login* (el usuario y la contraseña). Su señal ```clicked``` debe conectarse al método ```enviar_login(self)```."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "\n",
    "- ```enviar_login(self)```: Debe enviar la información ingresada en los campos de texto mediante la señal ```senal_enviar_login(tuple)```. El formato de la tupla a enviar es ```(usuario, contraseña)```."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- ```recibir_validación(self, valid, errores)```: \n",
    "\n",
    "    Este método es llamado por la lógica de la ventana inicial. \n",
    "    \n",
    "    Se recibirá un *bool* valid, que indicará si el nombre de usuario y contraseña son válidos. De no serlos (alguno o ambos), la *list* errores contendrá los *strings* \"Usuario\" y/o \"Contraseña\", de acuerdo a la naturaleza del error.\n",
    "\n",
    "    En caso de que valid sea ```True```, se deberá esconder la ventana de inicio.\n",
    "\n",
    "    En caso de que sea ```False```, se deberá notificar al usuario de los errores mediante los campos de texto correspondientes (usando PlaceholderText).\n",
    "    \n",
    "    En ambos casos, se deberá vaciar los campos de texto."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Además..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Debes crear la señal mencionada en `enviar_login(self)`, `senal_enviar_login`:\n",
    "\n",
    "- `senal_enviar_login`: Una pyqtSignal de la ventana de login, que envía una *tuple* con los datos de usuario y contraseña."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
