web-dev-qa-db-fra.com

Détecter l'entrée de clé dans Python

(En 2013) Je ne sais pas pourquoi Python est si bizarre, vous ne pouvez pas trouver cela en recherchant dans google très facilement, mais c'est assez simple.

Comment puis-je détecter "ESPACE" ou en fait n'importe quelle clé? Comment puis-je faire ceci:

print('You pressed %s' % key)

Cela devrait être inclus dans python core, donc veuillez ne pas lier les modules non liés au core python.

16
Velocity-plus

Vous pouvez créer une petite application Tkinter:

import Tkinter as tk

def onKeyPress(event):
    text.insert('end', 'You pressed %s\n' % (event.char, ))

root = tk.Tk()
root.geometry('300x200')
text = tk.Text(root, background='black', foreground='white', font=('Comic Sans MS', 12))
text.pack()
root.bind('<KeyPress>', onKeyPress)
root.mainloop()
20
unutbu

Utilisez Tkinter, il y a une tonne de tutoriels en ligne pour cela. en gros, vous pouvez créer des événements. Voici un lien vers un excellent site! Cela facilite la capture des clics. De plus, si vous essayez de créer un jeu, Tkinter a également une interface graphique. Bien que je ne recommanderais pas Python pour les jeux du tout, cela pourrait être une expérience amusante. Bonne chance!

3
Praznav

La saisie de clé est un événement prédéfini. Vous pouvez capturer des événements en joignant event_sequence (s) à event_handle (s) en utilisant une ou plusieurs des méthodes de liaison existantes (bind, bind_class, tag_bind, bind_all). Pour pouvoir faire ça:

  1. définir un event_handle méthode
  2. choisissez un événement (event_sequence) qui correspond à votre cas de ne liste d'événements

Lorsqu'un événement se produit, toutes ces méthodes de liaison appellent implicitement le event_handle en passant un objet Event, qui inclut des informations sur les détails de l'événement qui s'est produit, comme argument.

Afin de détecter l'entrée clé, on pourrait d'abord attraper tous les '<KeyPress>' ou '<KeyRelease>' événements, puis découvrez la clé particulière utilisée en utilisant event.keysym attribut.

Voici un exemple utilisant bind pour capturer les deux '<KeyPress>' et '<KeyRelease>' événements sur un widget particulier (root):

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk


def event_handle(event):
    # Replace the window's title with event.type: input key
    root.title("{}: {}".format(str(event.type), event.keysym))


if __name__ == '__main__':
    root = tk.Tk()
    event_sequence = '<KeyPress>'
    root.bind(event_sequence, event_handle)
    root.bind('<KeyRelease>', event_handle)
    root.mainloop()
2
Nae