События

В дополнение к механизму сигналов, описанному ранее, существует набор событий, которые отражают механизм событий X Window. Callback-функции также могут быть привязаны к ним. Вот эти события:

  event
  button_press_event
  button_release_event
  scroll_event
  motion_notify_event
  delete_event
  destroy_event
  expose_event
  key_press_event
  key_release_event
  enter_notify_event
  leave_notify_event
  configure_event
  focus_in_event
  focus_out_event
  map_event
  unmap_event
  property_notify_event
  selection_clear_event
  selection_request_event
  selection_notify_event
  proximity_in_event
  proximity_out_event
  visibility_notify_event
  client_event
  no_expose_event
  window_state_event

Для того, чтобы связать callback функцию с одним из этих событий, нужно использовать метод connect() , описанный ранее, используя одно из вышеназванных событий в качестве параметра name. Callback функции (или методы) для событий несколько отличаются от callback функций для сигналов:

  def callback_func(widget, event, callback_data ):

  def callback_meth(self, widget, event, callback_data ):

GdkEvent это класс python, который показывает, какие события произошли. Другая особенность событий заключается в типе события. Возможные значения типа:

  NOTHING
  DELETE
  DESTROY
  EXPOSE
  MOTION_NOTIFY
  BUTTON_PRESS
  _2BUTTON_PRESS
  _3BUTTON_PRESS
  BUTTON_RELEASE
  KEY_PRESS
  KEY_RELEASE
  ENTER_NOTIFY
  LEAVE_NOTIFY
  FOCUS_CHANGE
  CONFIGURE
  MAP
  UNMAP
  PROPERTY_NOTIFY
  SELECTION_CLEAR
  SELECTION_REQUEST
  SELECTION_NOTIFY
  PROXIMITY_IN
  PROXIMITY_OUT
  DRAG_ENTER
  DRAG_LEAVE
  DRAG_MOTION
  DRAG_STATUS
  DROP_START
  DROP_FINISHED
  CLIENT_EVENT
  VISIBILITY_NOTIFY
  NO_EXPOSE
  SCROLL
  WINDOW_STATE
  SETTING

Доступ к этим значениям осуществляется с помощью приставки gtk.gdk. Например gtk.gdk.DRAG_ENTER.

Итак, для того чтобы привязать к событию Callback функцию мы должны сделать что-то похожее на:

  button.connect("button_press_event", button_press_callback)

Здесь подразумевается что button это виджет GtkButton. Теперь, когда мышь будет наведена на кнопку и нажата, то произойдёт вызов функции button_press_callback. Эта функция объявлена как:

  def button_press_callback(widget, event, data ):

Возвращаемое значение показывает, должно ли событие распространяться дальше с помощью механизма обработки событий GTK+. Возвращение True означает то, что событие было обработано и не должно распространяться дальше. Возвращение False продолжает обычную обработку событий GTK+. Подробности смотрите в Глава 20, События и обработка сигналов

Выделение (selection) в GDK и drag&drop API тоже излучают некое число событий, отражающихся в сигналах GTK+. Смотрите Раздел 22.3.2, “Сигналы на перетаскиваемом виджете” and Раздел 22.3.4, “Сигналы при перетаскивании на виджет” для подробностей о создании callback функций для этих сигналов:

  selection_received
  selection_get
  drag_begin_event
  drag_end_event
  drag_data_delete
  drag_motion
  drag_drop
  drag_data_get
  drag_data_received

Предыдущая страница На уровень выше Следующая страница
2.2. Сигналы и Callback Оглавление 2.4. Продвигаемся по Hello World

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>