Exemple minimal PyGObject : les raccourcis claviers

Jean-Pierre Bucciol

22 sep 2024

Le cinquième exemple minimal dans la programmation d'interfaces graphiques en Python 3, Gtk 3 et PyGObject montre comment utiliser des raccourcis claviers dans une fenêtre.

#!/usr/bin/env python
# jpsb le 22 sep 2024

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

# ----------------------------------------------------
class MainWindow(Gtk.Window):

    # ----------------------------------------------------
    def __init__(self):
        super().__init__(title="Raccourcis claviers")

        self.connect("key-press-event", self.main_grab_key)

    def main_grab_key(self, widget, event):

        mykeyval = event.keyval
        mykeyname = Gdk.keyval_name(mykeyval)
        print("-"*40)
        print("mykeyval =", mykeyval, "; mykeyname =", mykeyname)

        ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
        if ctrl :
            print("touche Ctrl pressée")

        if mykeyval == Gdk.KEY_Left :
            print("touche"+mykeyname+"pressée")
        elif mykeyval == Gdk.KEY_Right :
            print("touche Gdk.KEY_Right pressée")
        elif mykeyval == Gdk.KEY_Down :
            print("touche Gdk.KEY_Down pressée")
        elif mykeyval == Gdk.KEY_Up :
            print("touche Gdk.KEY_Up pressée")
        elif mykeyval == Gdk.KEY_Page_Down :
            print("touche Gdk.KEY_Page_Down pressée")
        elif mykeyval == Gdk.KEY_Page_Up :
            print("touche Gdk.KEY_Page_Up pressée")
        elif mykeyval == Gdk.KEY_Delete :
            print("touche Gdk.KEY_Delete pressée")
        elif mykeyval == Gdk.KEY_Home :
            print("touche Gdk.KEY_Home pressée")
        elif mykeyval == Gdk.KEY_Escape :
            print("touche Gdk.KEY_Escape pressée")
        elif mykeyval == Gdk.KEY_Return or mykeyval == Gdk.KEY_KP_Enter :
            print("touche Gdk.KEY_Return ou Gdk.KEY_KP_Enter pressée")
        elif ctrl and mykeyval == Gdk.KEY_q :
            print("touche Ctrl et Gdk.KEY_q pressée")
            Gtk.main_quit()

        return True

# ----------------------------------------------------
main = MainWindow()
main.connect("destroy", Gtk.main_quit)
main.show_all()

Gtk.main()

Ce programme ouvre une fenêtre vide et récupère toutes les touches qui sont entrées au clavier. Pour des raisons d'exemple minimal, on écrit simplement dans la console les touches qui sont utilisées, et si la touche Ctrl a été pressée :

medias/2024/09/python-raccourcis-claviers-1-f

----------------------------------------
mykeyval = 97 ; mykeyname = a
----------------------------------------
mykeyval = 98 ; mykeyname = b
----------------------------------------
mykeyval = 99 ; mykeyname = c
----------------------------------------
mykeyval = 100 ; mykeyname = d
----------------------------------------
mykeyval = 65363 ; mykeyname = Right
touche Gdk.KEY_Right pressée
----------------------------------------
mykeyval = 65366 ; mykeyname = Page_Down
touche Gdk.KEY_Page_Down pressée
----------------------------------------
mykeyval = 65307 ; mykeyname = Escape
touche Gdk.KEY_Escape pressée
----------------------------------------
mykeyval = 65507 ; mykeyname = Control_L
----------------------------------------
mykeyval = 115 ; mykeyname = s
touche Ctrl pressée
----------------------------------------
mykeyval = 65507 ; mykeyname = Control_L
----------------------------------------
mykeyval = 113 ; mykeyname = q
touche Ctrl pressée
touche Ctrl et Gdk.KEY_q pressée

On trouve la (longue) liste des constantes qui mémorisent les valeurs des touches sur docs.gtk.org. Ici on marque particulièrement l'interception des touches de navigation du clavier, les touches Delete et Escape, ainsi que Ctrl q (qui quitte le programme).

Avec le True qui suit le return, la méthode main_grab_key intercepte toutes les touches tapées au clavier, de telle sorte qu'elles ne sont pas passées au reste du programme. Si l'on souhaite laisser passer les touches pressées, le cas typique étant une édition de texte, supprimer simplement le True.

C'est le sixième article consacré à la programmation Python, GTK et PyGObject. Les cinq premiers :

← Article précédent
Exemple minimal PyGObject : passage de la valeur d'une variable entre deux classes ou fenêtres, sept 2024
Article suivant →
Exemple minimal PyGObject : récupérer les clicks et la roulette de la souris, sept 2024

Je préfère vraiment les contacts à l'ancienne, par courrier électronique à l’adresse jpsmail(at)free.fr. Antispam : penseras-tu à remplacer (at) par @ dans l’adresse ? Que cela ne t'enpêche pas d'ajouter un commentaire :

Nom :

Commentaire :

Articles (304)

   (*: nécessite un mot de passe.)
↑ Retour en haut de la page