Blame platform-demos/es/signals-callbacks.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:e="http://projectmallard.org/experimental/" type="guide" style="task" id="signals-callbacks.py" xml:lang="es">
Packit 1470ea
Packit 1470ea
<info>
Packit 1470ea
  <title type="text">Señales y retornos de llamada (Python)</title>
Packit 1470ea
  <link type="guide" xref="beginner.py#theory"/>
Packit 1470ea
  <link type="next" xref="button.py"/>
Packit 1470ea
  <revision version="0.1" date="2012-06-16" status="draft"/>
Packit 1470ea
Packit 1470ea
  <desc>Una explicación de señales y retornos de llamada en GTK+.</desc>
Packit 1470ea
  <credit type="author copyright">
Packit 1470ea
    <name>Sebastian Pölsterl</name>
Packit 1470ea
    <email its:translate="no">sebp@k-d-w.org</email>
Packit 1470ea
    <years>2011</years>
Packit 1470ea
  </credit>
Packit 1470ea
  <credit type="editor">
Packit 1470ea
    <name>Marta Maria Casetti</name>
Packit 1470ea
    <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
    <years>2012</years>
Packit 1470ea
  </credit>
Packit 1470ea
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Daniel Mustieles</mal:name>
Packit 1470ea
      <mal:email>daniel.mustieles@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2011 - 2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Nicolás Satragno</mal:name>
Packit 1470ea
      <mal:email>nsatragno@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012 - 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Jorge González</mal:name>
Packit 1470ea
      <mal:email>jorgegonz@svn.gnome.org</mal:email>
Packit 1470ea
      <mal:years>2011</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Señales y retornos de llamada</title>
Packit 1470ea
Packit 1470ea
<links type="section"/>
Packit 1470ea
Packit 1470ea
<section id="overview">
Packit 1470ea
<title>Visión general</title>
Packit 1470ea
Packit 1470ea

Al igual que la mayoría de los kits de herramientas de IGU, GTK+ usa un modelo de programación dirigida por eventos. Cuando el usuario no hace nada, GTK+ se queda en el bucle principal y espera la entrada. Si el usuario realiza alguna acción (como una pulsación del ratón), entonces el bucle principal «despierta» y le envía un evento a GTK+.

Packit 1470ea
Packit 1470ea

Cuando los widgets reciben un evento, frecuentemente emiten una o más señales. Las señales le notifican a su programa que «algo interesante sucedió» invocando funciones que les ha conectado. Estas funciones se conocen comúnmente como retornos de llamada. Cuando sus retornos de llamada se invoquen, típicamente realizaría alguna acción. Después de que un retorno de llamada termina, GTK+ retorna al bucle principal y espera más entrada del usuario.

Packit 1470ea
Packit 1470ea

Un ejemplo genérico es: id_de_manejador = widget.connect("evento", retorno_de_llamada, datos). widget es una instancia de un widget que creó anteriormente. A continuación, el evento en el que está interesado. Cada widget tiene sus propios eventos particulares que pueden ocurrir. Por ejemplo, si tiene un «Gtk.Button» generalmente querrá conectar el evento «clicked»: esto significa que cuando el botón se pulsa, la señal se envía. Otro ejemplo es la señal notify::property: cada vez que una <link xref="properties.py">propiedad</link> se modifica en un «GObject», en lugar de sólo emitir la señal notify, GObject asocia como un detalle a la emisión de la señal el nombre de la propiedad modificada. Esto permite clientes que quieran notificarse de cambios de una sola propiedad para filtrar la mayoría de los eventos antes de recibirlos. Tercero, el argumento «retorno_de_llamada» es el nombre de la función de retorno de llamada, que contiene el código que se ejecuta cuando se emiten las señales del tipo especificado. Finalmente, el argumento opcional «datos» incluye cualquier dato que debe pasarse cuando se emita la señal.

Packit 1470ea
Packit 1470ea

La función devuelve un número (el id_de_manejador) que identifica este par «señal-retorno de llamada» particular. Este número se requiere para desconectar una señal para que la función de retorno de llamada no se llame durante emisiones de la señal a la que se ha conectado futuras o en progreso, como en widget.disconnect(id_de_manejador).

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="references">
Packit 1470ea
Packit 1470ea
<title>Referencias</title>
Packit 1470ea

<link href="http://developer.gnome.org/gobject/stable/signal.html">Señales</link> en la documentación de GObject

Packit 1470ea

<link href="http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.html">Conceptos básicos: bucle principal y señales</link> en el tutorial de GTK+ en Python 3

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
</page>