MyTetra Share
Делитесь знаниями!
События
Время создания: 07.05.2017 11:17
Раздел: Python - PyGTK - Теория - сигналы и события - Привет мир!
Запись: xintrea/mytetra_db_mcold/master/base/1493929545360ewmfv4t/text.html на raw.githubusercontent.com

В дополнение к механизму сигналов, описанному ранее, существует набор событий, которые отражают механизм событий 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
 
MyTetra Share v.0.65
Яндекс индекс цитирования