Créer un menu Python Temps Réel: Plus besoin de la touche Entrée !

Créer des menus interactifs en Python peut souvent être simple et direct. Cependant, si vous cherchez à améliorer l’expérience utilisateur en permettant de faire des sélections avec une seule touche, plutôt que de demander à l’utilisateur d’appuyer sur Entrée, vous pourriez vous retrouver dans une impasse. Dans cet article de blog, nous allons explorer le problème de la nécessité d’utiliser la touche Entrée pour confirmer les choix de menu et introduire une solution qui exploite la détection d’entrée clavier.

Comprendre le Problème

Dans les applications console traditionnelles, les méthodes de saisie utilisateur comme raw_input() (ou simplement input() en Python 3) nécessitent généralement que les utilisateurs appuient sur la touche Entrée après avoir sélectionné une option. Cela peut nuire à l’expérience utilisateur, surtout dans le contexte de menus où une réponse rapide est souhaitée.

Le code existant que l’utilisateur a fourni est le suivant :

import sys
print """Menu
1) Dire Foo
2) Dire Bar"""
answer = raw_input("Faites une sélection> ")

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

En l’état, ce code nécessite que l’utilisateur appuie sur Entrée après avoir tapé sa sélection. Mais il existe une meilleure façon de faire !

La Solution: Utiliser msvcrt

Si vous êtes sur une plateforme Windows, la bibliothèque msvcrt peut nous aider à réaliser une détection d’entrée en temps réel. La fonction clé ici est getch(), qui capture une frappe immédiatement sans attendre un appui sur Entrée.

Guide Étape par Étape

  1. Importer la Bibliothèque Commencez par importer la bibliothèque msvcrt qui nous permet d’interagir avec l’entrée clavier de la console.

    import msvcrt
    
  2. Capturer la Frappe Utilisez la fonction getch() pour attendre une seule pression de touche, permettant au programme d’agir au moment où la touche est pressée.

    answer = msvcrt.getch()
    
  3. Implémenter le Menu Maintenant, mettons cela en contexte en créant un menu simple qui écoute pour les touches 1 ou 2 sans nécessiter Entrée.

    import msvcrt
    
    print("Menu")
    print("1) Dire Foo")
    print("2) Dire Bar")
    
    while True:  # Boucler indéfiniment pour continuer à vérifier une pression de touche
        answer = msvcrt.getch()  # Attendre une pression de touche
    
        if answer == b'1':  # Si '1' est pressé
            print("foo")
            break  # Quitter la boucle après avoir répondu
        elif answer == b'2':  # Si '2' est pressé
            print("bar")
            break  # Quitter la boucle après avoir répondu
    

Comment ça fonctionne

  • Le menu s’affiche et le programme entre dans une boucle.
  • La fonction getch() met le programme en pause jusqu’à ce que l’utilisateur appuie sur une touche.
  • Après avoir détecté la touche, elle vérifie si elle correspond à 1 ou 2, exécute l’action appropriée, puis quitte la boucle.

Conclusion

En suivant les étapes décrites ci-dessus, vous pouvez créer une expérience de menu plus efficace et conviviale dans vos applications Python. Avec la bibliothèque msvcrt permettant une détection immédiate des frappes, les utilisateurs peuvent interagir avec votre programme sans l’exigence encombrante d’appuyer sur Entrée.

Vous pouvez maintenant améliorer vos applications console et offrir une interaction plus fluide à vos utilisateurs. Bon codage !