繁体   English   中英

在 Python/Pygame 中获取没有焦点的输入?

[英]Get Inputs without Focus in Python/Pygame?

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

我的应用程序的当前视图

这本身在 Pygame windows 聚焦时工作得很好,我的问题是,我不能一直聚焦这个,事实上它永远不会聚焦,因为无论哪种方式我都会使用 OBS 到 stream 或者我会使用我的模拟器和 pygame 没有检测到 window 之外的输入。有没有办法让 python 或 pygame 读取对计算机的所有输入??? 我在这里碰壁了。 提前致谢!!

为此有一个 SDL 环境变量。 只需设置它即可启用后台输入。

import os
os.environ["SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS"] = "1"

将其添加到操纵杆文档中示例的顶部并尝试一下。

使用 pygame 2.1.2、sdl 2.0.18、Windows 10 (21H2)、Xbox One 测试,如 controller

参考:

使用pygame.event.grab(True)

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

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

按照上面的两个注释,为了保持对pygame窗口的关注(有效地将光标保持在pygame窗口的边界内,直到我能够使用以下代码进行此工作:

pygame.event.set_grab(True) # Keeps the cursor within the pygame window

将此代码与通过按键(例如ESCAPE键)退出程序的方式结合在一起(因为通过pygame.QUIT将光标移动到窗口的框架来关闭窗口是不可能的,以关闭窗口):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM