是否有可能干净地检测到(理想情况下是原生的)Python(2)中的键?我目前正在使用Tkinter来处理键盘事件,但我所看到的是,当我按住键时,Key
,KeyPress
和KeyRelease
事件全部触发经常,而不是预期的KeyPress
一次和KeyRelease
在最后。我已经考虑过使用事件之间的时间来尝试区分重复触发和实际事件,但时间似乎不一致 - 因此,虽然可行,但似乎很痛苦。
沿着同样的路线,是否有一种很好的方法来检测多个按键(并且所有按下按钮?)我想刚刚使用KeyPress
和KeyRelease
来检测开始/按键结束,但似乎没有效果。
感谢任何建议。
谢谢!
答案 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
之前的状态。