Глава 20. Подробнее о событиях и обработке сигналов

Содержание

20.1. Методы сигналов
20.1.1. Подключение и отключение обработчиков
20.1.2. Временная блокировка обработчиков
20.1.3. Посылка и остановка сигналов
20.2. Сбор и распространение сигналов

20.1. Методы сигналов

Методы сигналов gobject.GObject наследуются объектами gtk.Object, в которые входят все виджеты GTK+.

20.1.1. Подключение и разъединение обработчиков

  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)

Первые четыре метода подключают обработчик сигнала (cb) к gtk.Object (object) для заданного имени сигнала, и возвращают handler_id, который идентифицирует соединение. cb_args это ноль или более элементов, передаваемые в cb. Методы connect_after() и connect_object_after() будут вызывать обработчики сигналов после других обработчиков (включая стандартные), подключённых к этому объекту и сигналу. Каждый обработчик сигнала имеет собственный список ожидаемых аргументов. Вы можете просмотреть документацию GTK+ для того, чтобы понять, какие из аргументов должны обрабатываться обработчиком сигнала. Эта информация по распространённым виджетам находится в Приложении A, Сигналы GTK . Основной обработчик сигнала похож на:

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

Обработчик сигнала является частью класса объекта Python (указан в методе connect() как self.cb) и будет иметь дополнительный аргумент, передаваемый первым - экземпляр объекта self:

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

Методы connect_object() и connect_object_after() вызывают обработчики сигналов со slot_object, который заменяет object в первом аргументе:

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

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

Метод disconnect() уничтожает соединение между обработчиком сигнала и сигналом объекта. handler_id определяет, какое же соединение следует уничтожить.

20.1.2. Временная блокировка обработчиков

Следующие методы:

  object.handler_block(handler_id)

object.handler_unblock(handler_id)

блокируют и разблокируют обработчик, указанный в handler_id. Когда обработчик сигнала заблокирован, то он не вызывается по сигналу.

20.1.3. Излучение и остановка сигналов

Следующие методы:

  object.emit(name, ...)

object.emit_stop_by_name(name)

излучают и останавливают сигнал name соответственно. Излучение сигнала происходит по умолчанию, и пользователь определяет обработчики. Метод emit_stop_by_name() будет отключать излучение сигнала.