Capítulo 20. Procesamiento Avanzado de Eventos y Señales

Tabla de contenidos

20.1. Métodos de Señales
20.1.1. Conectar y Desconectar Manejadores de Señal
20.1.2. Bloqueo y Desbloqueo de Manejadores de Señal
20.1.3. Emisión y Parada de Señales
20.2. Emisión y Propagación de Señales

20.1. Métodos de Señales

Los métodos de señales son métodos de la clase gobject.GObject que se heredan en los gtk.Objects incluyendo todos los controles GTK+.

20.1.1. Conectar y Desconectar Manejadores de Señal

  handler_id = object.connect(name, cb, cb_args)
  
  handler_id = object.connect_after(name, cb, cb_args)
  
  handler_id = object.connect_object(name, cb, slot_object, cb_args)
  
  handler_id = object.connect_object_after(name, cb, slot_object, cb_args)
  
  object.disconnect(handler_id)
      

Los primeros cuatro métodos conectan un manejador de señales (cb) a un objeto gtk.Object (object) para la señal especificada por name, y devuelven un valor handler_id que identifica la conexión. cb_args son cero o más argumentos que serán pasados al final de la llamada al manejador cb. Los métodos connect_after() y connect_object_after() harán que se llame a sus manejadores después de haber llamado a todos los demás manejadores (incluyendo los manejadores predeterminados) que estén conectados a ese mismo objecto y señal. Cada manejador de señales de un objeto tiene su propio conjunto de argumentos. Resulta útil consultar la documentación de GTK+ para averiguar qué argumentos se deben usar en cada manejador de señales, aunque se proporciona información sobre los controles más comunes en el apéndice Señales de GTK+. El manejador de señales genérico es similar a este:

  def signal_handler(object, ...., cb_args):
      

Los manejadores de señales que se definen como métodos de una clase Python (especificados en los métodos connect() como self.cb) tendrán un argumento adicional como primer argumento, la instancia del objeto self:

  signal_handler(self, object, ...., cb_args)
      

Los métodos connect_object() y connect_object_after() llaman al manejador de señales con el slot_object en lugar del object como primer argumento:

  def signal_handler(slot_object, ...., func_args):

  def signal_handler(self, slot_object, ...., func_args):
      

El método disconnect() elimina la conexión entre un manejador y la señal de un objeto. El argumento handler_id especifica la conexión que se eliminará.

20.1.2. Bloqueo y Desbloqueo de Manejadores de Señal

Los siguientes métodos:

  object.handler_block(handler_id)

  object.handler_unblock(handler_id)
        

bloquean y desbloquean el manejador de señal especificado en el argumento handler_id. Cuando un manejador de señal está bloqueado no es invocado cuando se produce la señal.

20.1.3. Emisión y Parada de Señales

Los siguientes métodos:

  object.emit(name, ...)

  object.emit_stop_by_name(name)
        

emiten y paran, respectivamente, la señal especificada en el argumento name. La emisión de la señal hace que se ejecuten el manejador predeterminado y los definidos por el usuario. El método emit_stop_by_name() abortará la emisión de señales actual.