我的覆盆子机器人需要一个简单的操纵杆。由于X-Server问题等,PyGame在我的IDE,Eclipse或腻子中无法正常工作。

为此,我想编写一个简约的键事件监听器,但是我无法使python用我的代码监听键释放事件:

import sys, tty, termios, time

#Old settings
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)

#Loop
work=0
while True:
    tty.setraw(sys.stdin.fileno())
    ch = sys.stdin.read(1)
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

    if "w" in ch and work==0:
        work=1
        print "Car goes"

    if "w" not in ch and work==1:
        work=0
        print "Car stops"

    if ch in "c":
        break


如果我按住键w,它将被识别。如果释放它,循环将等待新的输入。

为什么循环在哪一行等待按键按下?为了测试目的,我想用一个简约的代码来做到这一点。

最佳答案

您的代码在

ch = sys.stdin.read(1)


因为它尝试从stdin读取1个字符,但是没有字符,所以它只是等到有一个字符。

如果您想以非阻塞方式读取它,请检查以下内容:
https://repolinux.wordpress.com/2012/10/09/non-blocking-read-from-stdin-in-python/

如您所见,有多种方法可以这样做,但是它们并不十分简单

关于python - 在没有pygame的情况下监听键按住,键按下和键释放事件的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32540384/

10-12 16:41