【发布时间】:2022-12-25 06:51:54
【问题描述】:
我正在尝试使用 pynput python 库一起读取三个按键,以在 ROS 中模拟类似游戏的机器人驱动器。它工作得很好,但问题是每当我按下左箭头键对于任何其他键,最后一个(第三个)键不会被读取。我在另一台 PC 上试过代码,它有同样的问题。 我相信理解我要说的内容的最好方法就是使用我将在下面粘贴的代码(您可以将 key.left 更改为任何其他键,例如 key.page_up):
from pynput.keyboard import Key, KeyCode, Listener
## ### read combination of more than one key i.e three keys #####
## ### one can also apply it to two keys by making the key_buffer array to take two elements #####
key_buffer = [None, None, None]
def press(key):
global key_buffer
if key == Key.up:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
elif key == Key.down:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
elif key == Key.left:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
elif key == Key.right:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
elif key == Key.alt:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
elif key == Key.space:
if key not in key_buffer:
if None in key_buffer:
key_buffer[key_buffer.index(None)] = key
print(key_buffer)
def release(key):
global key_buffer
if key == Key.up:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
elif key == Key.down:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
elif key == Key.left:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
elif key == Key.right:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
elif key == Key.alt:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
elif key == Key.space:
if key in key_buffer:
key_buffer[key_buffer.index(key)] = None
print(key_buffer)
def main():
listener = Listener(on_press=press, on_release=release)
listener.start()
listener.join()
if __name__=="__main__":
main()
在尝试上面的代码之前,请记住安装到 pynput 库
pip3 install pynput
我只想知道导致问题的原因以及可能的解决方案。
【问题讨论】: