侦听特定键的全局键控

2024-09-24 22:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Pygame,我现在有一个循环:

def quest_loop():
    i = 0
    while i < len(quests):
        event = pygame.event.wait()
        if event.type == KEYDOWN and event.key == K_F4:
            screen.fill(BLACK)
            message_display(*normal_message, quests[i], wrap_text)
            i += 1
            pygame.event.clear()

我已经为一个游戏创建了一个小的覆盖,它通过我在代码前面生成的数组进行循环。你知道吗

这是完美的工作,但只有当我有pygame窗口选择。我想让它听特定的F4键,即使它没有被选中。我尝试过使用win32api模块,但没有取得很大成功。虽然我设法让代码工作,但有许多问题我无法解决。你知道吗

谢谢你的帮助。你知道吗

更新:

我又看了一遍win32api,并设法纠正了一个重复出现的问题(只需按一下键就会在我的列表中重复多次)。此代码解决了此问题:

`def key_press():
    global was_pressed
    if was_pressed == False and quest_forward() == True:
        was_pressed = True
        return True
    if was_pressed == True and quest_forward() == True:
        return False
    if was_pressed == True and quest_forward() == False:
        was_pressed = False
        return False`

我要处理的下一个问题是,除非pygame窗口有焦点,否则无法识别输入。覆盖的当前状态并不是完全不可行,只是有点烦人。我已经看过pyHook,但我似乎无法将pythoncom.PumpMessages()插入到我的代码中并使其工作。你知道吗

编辑:在尝试了许多不同的操作之后,当我试图维护pygame窗口时,我的事件处理程序似乎无法运行,我已经开始尝试使用wxPython和win32api。你知道吗


Tags: and代码eventfalsetruereturnifdef