2013-07-23 16 views
14

Nie wiem, dlaczego Python jest taki dziwny, nie można go znaleźć, wyszukując w google bardzo łatwo, ale jest to dość proste.Wykrywanie wprowadzania klucza w Pythonie

Jak wykryć "PRZESTRZEŃ" lub właściwie dowolny klucz? Jak mogę to zrobić:

print('You pressed %s' % key) 

To powinno być zawarte w rdzeniu Pythona, więc proszę nie odwołuje moduły nie związanych z podstawową pytona.

Odpowiedz

17

Można zrobić małą aplikację 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() 
+1

Czy używanie Tk wymagają graficznego okno? Pracuję nad systemem wbudowanym. sys.strin.read() poniżej jest kuszące, ale musisz nacisnąć enter. – user391339

+4

@ user391339: Myślę, że Tk wymagałby systemu okien lub wirtualnego wyświetlacza. W przypadku systemu wbudowanego przepis 'getch', taki jak [this one] (http://stackoverflow.com/a/21659588/190597) może być lepszy. – unutbu

+0

Należy zauważyć, że działa to tylko w języku Python 3.x –

3

Używaj Tkinter istnieje mnóstwo tutoriali online dla tego produktu. zasadniczo możesz tworzyć wydarzenia. Oto link do świetnej strony! Ułatwia to przechwytywanie kliknięć. Ponadto, jeśli próbujesz stworzyć grę, Tkinter ma również GUI. Chociaż nie polecam Pythona do gier, może to być zabawny eksperyment. Powodzenia!

0

Kluczowe wejście to predefiniowane zdarzenie. Możesz przechwytywać zdarzenia, dołączając event_sequence (s) do event_handle (s), używając jednej lub wielu istniejących metod wiązania (bind, bind_class, tag_bind, bind_all). W tym celu należy:

  1. zdefiniować event_handle metodę
  2. odebrać zdarzenie (event_sequence), który pasuje do Twojego sprawę od an events list

Kiedy zdarzenie nastąpi, wszystkie z tych metod wiążących niejawnie wywołuje Metoda event_handle podczas przekazywania obiektu Event, która zawiera informacje o specyfice zdarzenia, które miało miejsce, jako argument.

Aby wykryć kluczowe wejście, można najpierw złapać wszystkie zdarzenia '<KeyPress>' lub '<KeyRelease>', a następnie dowiedzieć się, jaki konkretny klucz jest używany przy korzystaniu z atrybutu event.keysym.

Poniżej znajduje się przykład za pomocą bind złapać obie '<KeyPress>' i '<KeyRelease>' wydarzenia na danym widget (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()