Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

2.3. Évènements

En plus du système de signaux décrit auparavant, un certain nombre d'évènements reflètent le système évènementiel de X, des fonctions de rappel peuvent être associés à ceux-ci. En voici une liste :

  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

Pour connecter une fonction de rappel à l'un de ces évènements, on utilise la méthode connect() décrite à la section précédente, en mentionnant l'un des noms d'évènement ci-dessus comme paramètre nom. Les fonctions (ou méthodes) de rappel employées pour les évènements sont légèrement différentes de celles utilisées pour les signaux :

  def fct_rappel(widget, evenement, donnees_fct):

  def meth_rappel(self, widget, evenement, donnees_meth):  

GdkEvent est un type d'objet Python dont l'attribut type indique lequel des évènements ci-dessus est survenu. Les autres attributs de l'évènement dépendent du type de cet évènement. Les valeurs pour les types peuvent être les suivantes :

  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

On accède à ces valeurs en préfixant le type d'évènement avec gtk.gdk. Par exemple : gtk.gdk.DRAG_ENTER.

En résumé, pour connecter une fonction de rappel à un de ces évènements, on peut procéder ainsi :

  bouton.connect("button_press_event", fct_rappel_bouton)

Ainsi, le fait de cliquer avec la souris lorsque le pointeur se trouve au-dessus du bouton invoque la fonction fct_rappel_bouton. On peut définir cette fonction comme ceci :

  def fct_rappel_bouton(widget, evenement, donnees):

La valeur renvoyée par cette fonction indique si l'évènement doit être propagé par le système de gestion des évènements de GTK+. Renvoyer True indique que l'évènement a été traité et que sa diffusion s'arrête ici. En revanche, False laisse se poursuivre le processus normal de traitement de l'évènement. Voir le Chapitre 20, Gestion avancée des signaux et évènements pour en apprendre plus sur ce processus de diffusion.

Les API de sélection et de glisser-déposer de GDK émettent également un certain nombre d'évènements qui sont représentés dans GTK+ par des signaux. Voyez les sections 22.3.2 Les signaux du widget source et 22.3.4 Les signaux du widget destination (pas encore traduites) si vous souhaitez en apprendre plus sur les signatures des fonctions de rappel pour les signaux suivants :

  selection_received
  selection_get
  drag_begin_event
  drag_end_event
  drag_data_delete
  drag_motion
  drag_drop
  drag_data_get
  drag_data_received