Objetos, señales, ranuras. (Signals, Slots). Facilito- PyQt5

Buenas a mis lectores! Siguiendo con PyQt5, vamos a ver objetos, señales y ranuras. También suelen llamarse Signals y Slots en ingles. O la podemos encontrar como una relación

Objeto-Evento-Señal-Función.

Básicamente sabemos que una aplicación que dispone de un entorno gráfico GUI (Graphical User Interface) esta compuesta por objetos que pueden ser Botones, Labeles, Barras de progreso, etc. Un objeto botón, es como cualquier otro objeto dentro de nuestro programa; teniendo en cuenta que si dentro de nuestro programa instanciamos a «carlitos» dentro de una clase «humano»; Carlitos también es un objeto.

En Python casi todo es un objeto, una clase o una función..

Y es tan importante saber diferenciarlos, como también aprender de su relación y el porque de la misma.

 


 


Objeto

Pero veamos, que tanto un botón (visible o no) como «carlitos» es un objeto porque según la Wikipedia por ejemplo su definición corresponde a :

Unidad dentro de un programa de computadores que consta de un estado y de un comportamiento, que a su vez constan respectivamente de datos almacenados y de tareas realizables durante el tiempo de ejecución

Si tiene una «razón de existir durante la ejecución de nuestro programa» es un objeto. Ahora también cada objeto así como una razón y un porque puede generar un Evento. Clicar este Botón es un Evento.

Eventos

Un evento entonces puede definirse como toda «acción que realiza el usuario sobre un objeto«. Si en algún punto se invoca a el objeto «carlitos» mediante un método por ejemplo «carlitos.hablar(«Hola») también es un evento producido por el usuario. Así como cliquear un botón, mover una barra, presionar una tecla que se solicita o cerrar un dialogo». Estos eventos producen «Señales»

Señales

Pero, ¿que son las señales?. Un señal es aquello que se emite cuando ocurre un evento en particular, por ejemplo un clic. Esta señal es enviada para conectar a un Slot o «Ranura», que también podemos vagamente mal-llamar en nuestro idioma «Función». Los Widgets de Qt tienen muchas señales predefinidas, pero siempre podemos subclasificar widgets para agregarles nuestras propias señales. Y finalmente una ranura o función sera aquello que responde a la señal generando una acción. Qt mediante sus Widgets tiene también ranuras predefinidas.

 

 

Ranuras o funciones

Como decíamos anteriormente una ranura puede ser por ejemplo la ejecución de un bloque de código que cambie el label de un texto. Este código sera ejecutado cuando detecte una señal que sera enviada por un objeto por ejemplo un «botón». Entonces esta ranura o función estará «a la escucha, o espera» de la señal que genere el objeto.

 

Relación Objeto – Evento – Función u (Objeto, señal, ranura)

Señal recibida¿Y porque tantas formas de referirse a lo mismo?. No lo se, pero puedes llamarle o aprenderla como mas te guste, en mi caso prefiero decirles Objeto, evento y función. Por una cuestión practica mía, pero es importante conocer estos otras variaciones de nombres tanto en español como ingles para no confundirnos al absorber información de distintas fuentes. Sobre todo si eres un autodidacta de la vida como yo 😛

Veamos esta relación expresada primero en un gráfico para que te quede grabada a fuego!. Soy consciente del poder del material audiovisual 😉

Relación objeto evento función

 

En la imagen puedes ver que primeramente todo comienza al presionar el botón apagar. La acción del usuario de presionarlo (evento) dispara una señal que la función (ej : de guardar los datos del sistema y cerrarlo correctamente) esta esperando. Como la ha recibido se dispone a ejecutar una serie de procesos (funciones, slots) y finalmente nuestro equipo se apaga.

Objeto - Señal atrapada antes de apagarPiensa en esto, que pasaría si tienes abierto un programa que esta realizando cambios en el Disco Duro de tu computadora. No seria bueno que ese programa capture esta señal y la detenga advirtiéndote «Estas por apagar el equipo mientras estoy realizando cambios, podría acabar esto en una explosión» por ejemplo. Seguramente te ha sucedido cuando alguna aplicación se tilda y le mandas un «botonazo» o ordenas apagar la pc. Pues esa aplicación estaba programada para detectar y «detener» una señal de apagado para prevenir fallos futuros. O al menos debería.

 

Ahora esto en Python fácilmente se puede expresar en la siguiente lección donde cambiamos un label al presionar un botón. Aquí te dejo el código de ejemplo donde te identifico objeto, evento y función.

#Función que se llama al presionar
	def FuncionPresionar():
		self.label.setText("Un clavito clavo Pablito")
		
#Acción al presionar el botón
        self.pushButton.clicked.connect(FuncionPresionar)
#         Objeto-----> Evento---> Conectar --> Función o ranura
#########Objeto Botón.Evento(clicked).Conectar -> Función
#########El objeto botón mediante el evento clic envía la señal
#########de conectar a la función.

Y ya lo tienes, presionas el botón, se envía la señal y la función sucede!

 


Aclaración y algunos consejos para aprendices de Python

La verdad es que veníamos muy sencillos y parece que desde que empezamos con Pyqt5 esto es un ovillo sin principio ni final. Se encuentran muchas confusiones dando vueltas y logro detectar que un porcentaje de quienes aprenden programación en python (sobre todo si es el primer lenguaje), no cruza este umbral de comenzar a utilizar Python fuera de la consola. Aquí quiero dejarte algo de mi experiencia propia dentro y fuera de Python:

Si  aveces lees código y no entiendes, ademas de buscar en Google y preguntar, debes seguir leyéndolo en ese momento, guardando ese pedazo de código que no comprendemos como una incógnita en nuestras cabezas. Y así proseguimos con lo demás y ya veras que luego esclarece; tomando sentido todo el código como un solo objeto, que a su vez, es la suma de sus partes.

Normalmente es un error a mi forma de verlo que quienes aprenden programación se estanquen en código que no entienden. Pues tampoco debemos ver el código como si fuera un texto que va por palabras, oraciones, párrafos y debemos leer. Sino que esta bueno verlo en tu lado creativo como un «todo se relaciona con todo» y ese bloque que no se entiende, marcarlo como una interrogación y seguir. Si no seguimos, si nos estancamos también lo hace nuestro cerebro, y las ganas de tirar todo por la ventana se hacen escuchar.

 

Avanza, avanza..!. Ya te harás un experto, y una vez tengas la app que sueñas te encargas de los detalles y minucias. Solo mientras funcione todo, esta bien. Evitemos la parálisis por análisis que es donde muere el 99% de los aprendices y las aplicaciones millonarias. La búsqueda y corrección de errores tontos o el «código perfecto» déjalos para el final, solo lánzate!

 

 

 

Compartir es agradecer! :)

1 comentario en “Objetos, señales, ranuras. (Signals, Slots). Facilito- PyQt5”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.