【问题标题】:Get Inputs without Focus in Python/Pygame?在 Python/Pygame 中获取没有焦点的输入?
【发布时间】:2015-10-11 21:18:19
【问题描述】:

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

这本身,在 Pygame 窗口集中时工作得很好,我的问题是,我不能一直集中注意力,事实上它永远不会有焦点,因为无论哪种方式我都将使用 OBS 流式传输或我将使用我的模拟器,并且 pygame 不会检测到窗口外的输入。有什么方法可以让 python 或 pygame 读取计算机的所有输入???我在这里碰壁了。提前致谢!!

【问题讨论】:

标签: python input pygame


【解决方案1】:

使用pygame.event.grab(True)

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

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

【讨论】:

  • 你说的是 set_grab() 吗?这个不行,已经试过了。
  • 是的,我是。抱歉拼写错误。太糟糕了,这不起作用。
【解决方案2】:

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

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

将此代码与通过诸如 ESCAPE 键之类的按键退出程序的方法结合使用(因为通过将光标移动到窗口的框架以通过 pygame.退出):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多