[英]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.