高级Python键盘事件?

时间:2015-01-20 21:53:19

标签: python events tkinter keyboard keypress

是否有可能干净地检测到(理想情况下是原生的)Python(2)中的键?我目前正在使用Tkinter来处理键盘事件,但我所看到的是,当我按住键时,KeyKeyPressKeyRelease事件全部触发经常,而不是预期的KeyPress一次和KeyRelease在最后。我已经考虑过使用事件之间的时间来尝试区分重复触发和实际事件,但时间似乎不一致 - 因此,虽然可行,但似乎很痛苦。

沿着同样的路线,是否有一种很好的方法来检测多个按键(并且所有按下按钮?)我想刚刚使用KeyPressKeyRelease来检测开始/按键结束,但似乎没有效果。

感谢任何建议。

谢谢!

1 个答案:

答案 0 :(得分:2)

将keyup和keydown处理程序与全局数组一起使用:

keys = []

def down(event):
    global keys
    if not event.keycode in keys:
        keys.append(event.keycode)

def up(event):
    global keys
    keys.remove(event.keycode)

root.bind('<KeyPress>', down)
root.bind('<KeyRelease>', up)

现在,您可以在keys中检查多个条目。要删除您描述的连续行为,您必须在事件发生后比较keys之前的状态。