在Python/Pygame中获得无焦点的输入?

在Python/Pygame中获得无焦点的输入?,python,input,pygame,Python,Input,Pygame,我正在为自己创建一个小应用程序,以便能够显示键盘输入并以操纵杆布局显示它们,如下所示: 这本身,在Pygame窗口处于聚焦状态时工作得非常好,我的问题是,我不能一直聚焦,事实上它永远不会有聚焦,因为无论是使用OBS流还是使用模拟器,Pygame都不会检测到窗口外的输入。有没有办法让python或pygame读取所有输入到计算机的内容???我在这里碰壁。提前谢谢 使用pygame.event.grab(True) 当您的程序在窗口环境中运行时,它将与具有焦点的其他应用程序共享鼠标和键盘设备。如果

我正在为自己创建一个小应用程序,以便能够显示键盘输入并以操纵杆布局显示它们,如下所示:


这本身,在Pygame窗口处于聚焦状态时工作得非常好,我的问题是,我不能一直聚焦,事实上它永远不会有聚焦,因为无论是使用OBS流还是使用模拟器,Pygame都不会检测到窗口外的输入。有没有办法让python或pygame读取所有输入到计算机的内容???我在这里碰壁。提前谢谢

使用
pygame.event.grab(True)

当您的程序在窗口环境中运行时,它将与具有焦点的其他应用程序共享鼠标和键盘设备。如果程序将事件抓取设置为True,它将锁定程序中的所有输入。 最好不要总是抓取输入,因为它会阻止用户在系统上做其他事情


但是,您需要另一种退出方式,因为您将无法将鼠标移出显示窗口。

根据上面的两条评论,为了保持对pygame窗口的关注(有效地将光标保持在pygame窗口的范围内,直到我能够使用以下代码完成此操作:

pygame.event.set_grab(True) # Keeps the cursor within the pygame window
将此代码与使用诸如ESCAPE键之类的按键退出程序的方法结合起来(因为将光标移动到窗口的框架以通过pygame.quit关闭窗口是不可能的):


Pygame的事件处理无法为您做到这一点,因为它只侦听窗口事件。您要查找的是低级挂钩,请看这里的示例。您是说set_grab()?这不起作用,已经尝试过了。是的,我是。很抱歉拼写错误。太糟糕了,这不起作用。
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
            run = False