Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Un GUI en python : TP 5, la gestion du clavier

Contrôler son GUI avec le clavier, c'est un jeu d'enfant avec tkinter.

Vous vous souvenez lorsqu'on a associé des fonctions aux boutons ? Eh bien la démarche va être quasiment identique pour relier un raccourci clavier à une fonction.
De façon générale, cela se fait ainsi :

w.bind("<Key>", fonction)

On a ici "w" qui est le widget, "" qui est le code de la touche appuyée et enfin "fonction" qui est la fonction appelée.

Comment connaître le code ?

Ça peut être pratique c'est sûr. Pour ça, le plus simple reste à les essayer au lieu de lire toute la documentation. Essayez donc de lancer le code ci-dessous puis d'appuyer sur des touches :

#!/usr/bin/env python3.4
 # -*- coding:Utf-8 -*- 
 # print pressed key
 from tkinter import *
 
 def key(event):
     print(event.keysym)
 
 w = Tk()
 w.title("get key") 
 w.bind("<Key>", key)
 w.mainloop()
 

Ce petit bout de code va afficher la touche appuyée, dont la valeur sera à mettre à la place de pour utiliser cette touche.

Notez que la fonction appelée par ".bind" reçoit en argument l'évènement. Il faudra y penser lorsqu'on utilisera lambda.
Dans notre visionneuse, nous allons donc associer les flèches pour faire défiler les images, et la combinaison "ctrl-O" pour ouvrir une nouvelle image :

# Raccourcis clavier
 w.bind("<Left>", lambda e: defile_img(img_widget, "prev"))
 w.bind("<Right>", lambda e: defile_img(img_widget, "next"))
 w.bind("<Control - o>", lambda e: chg_img(img_widget))
 

Et voilà !

Avec tous ces TP, vous avez dévantage de billes en poche pour vous amuser avec tkinter.
Cette fois, je dépose le code à cette adresse, avec quelques modifications supplémentaires si vous souhaitez améliorer cette visionneuse : http://git.yeuxdelibad.net/tkv

Bon code ;)