2013-07-23 34 views
14

我不知道为什么Python很奇怪,你不能通过在google中搜索很容易找到它,但它很简单。在Python中检测键输入

如何检测'SPACE'或实际上是否有任何键? 我怎样才能做到这一点:

print('You pressed %s' % key) 

这应包括在Python的内核,所以请不要链接不相关的核心Python模块。

回答

17

你可以做一个小的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

不使用Tk的需要的图形窗口?我正在研究嵌入式系统。下面的sys.strin.read()是诱人的,但你需要按回车键。 – user391339

+4

@ user391339:我认为Tk需要一个窗口系统或虚拟显示器。对于嵌入式系统,'getch'配方如[this one](http://stackoverflow.com/a/21659588/190597)可能会更好。 – unutbu

+0

请注意,这只适用于Python 3.x –

3

使用Tkinter的 有一吨的教程在网上的这个。基本上,你可以创建事件。这是一个伟大的网站link! 这可以很容易地捕捉点击。另外,如果你想制作游戏,Tkinter也有一个GUI。 虽然,我不会推荐Python的游戏,但它可能是一个有趣的实验。 祝你好运!

0

键输入是一个预定义的事件。您可以通过使用一种或多种现有绑定方法(bind,bind_class,tag_bind,bind_all)将event_sequence(s)附加到event_handle(s)来捕获事件。为了做到这一点:

  1. 定义event_handle方法
  2. 选择适合从an events list

当一个事件发生的情况下,一个事件(event_sequence),所有这些结合方法的隐式调用event_handle方法,同时传递一个Event对象,其中包含有关发生的事件的具体信息作为参数。

为了检测键输入,可以先捕获所有的'<KeyPress>''<KeyRelease>'事件,然后通过使用event.keysym属性找出使用的特定密钥。

下面是一个例子使用bind捉对一个特定的微件(root)二者'<KeyPress>''<KeyRelease>'事件:

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()