Comment récupérer l’évènement KeypressEvent sur un Widget GTK

Keyboard in action Disons que vous vouliez par exemple changer le curseur de la souris lorsque l’utilisateur appuie sur la touche Control au dessus de votre widget. Cette tâche apparemment simple a presque failli me rendre dingue.

S’abonner à l’événement KeyPressEvent ne suffit pas.

Utiliser AddEvent pour ajouter KeyPress à la liste d’événements du widget ne suffit pas.

En fait, pour que l’évènement KeyPress soit déclenché, il faut que votre widget, tout comme un contrôle Winform, ait reçu le focus.

Donc, je passe la propriété CanFocus à true et… cela ne marche pas!

Arhgle!….

Grâce à ce lien, j’ai finalement pu retrouver toutes les étapes nécessaires :

  • Il vous faut utiliser la méthode AddEvent pour ajouter KeyPress à la liste d’événements de votre widget.
  • Il vous faut passer la propriété CanFocus à true
  • Il faut vous abonner à l’événement FocusIn et, lorsqu’il est appelé, passer la propriété HasFocus à true
  • Il faut vous abonner à l’événement FocusOut et, lorsqu’il est appelé, passer la propriété HasFocus à false
  • Sur l’évènement lors duquel vous désirez que votre widget reçoive le focus (probablement ButtonPress), il vous faut appeler la méthode GrabFocus

Seulement alors vous pourrez récupérer votre événement KeyPress.

    • ilovetocode
    • 14 octobre 2011

    Really useful! I have been trying for hours to get this to work!

  1. Aucun trackback pour l'instant