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 :
---------------------------------------- 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 :
Articles (304)
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 :