【问题标题】:Easier way of getting keyboard input in Pygame?在 Pygame 中获取键盘输入的更简单方法?
【发布时间】:2014-12-14 21:56:15
【问题描述】:

有没有比指定每个单独的键更简单的方法来获取 Pygame 中的键盘输入?例如,

if event.key == pygame.K_a:
    command = command + "a"
elif event.key == pygame.K_b:
    command = command + "b"
elif event.key == pygame.K_c:
    command = command + "c"

有什么方法可以使用函数为我做这件事吗?

【问题讨论】:

    标签: python python-3.x keyboard pygame keyboard-events


    【解决方案1】:

    如果每个键都需要完全不同的操作,那么就没有更好的方法了。如果多个键导致类似的操作,例如单个函数 f 可以将键作为参数,您可以使用 in 表达式,如下所示:

    if event.key in (pygame.K_a, pygame.K_b, pygame.K_c):
        f(event.key)
    

    如果左侧的内容包含在右侧的内容中,in 表达式的计算结果为 True。因此,如果按下的键是“a”、“b”或“c”,则使用该代码,将调用函数f,并将键作为参数。

    作为一个实际示例,假设您希望使用“Esc”或“q”键退出程序。你可以这样实现:

    if event.key in (pygame.K_ESCAPE, pygame.K_q):
        pygame.quit()
    

    上述代码实际上与以下代码相同:

    if event.key == pygame.K_ESCAPE:
        pygame.quit()
    elif event.key == pygame.K_q:
        pygame.quit()
    

    编辑

    从评论中,command 是一个连接到的字符串。如果说您想将按下的任意键 a-z 添加到 command,您可以这样做:

    if event.key in range(pygame.K_a, pygame.K_z + 1):
        command += event.unicode
    

    【讨论】:

    • 谢谢!有没有办法让f() 打印出密钥的 ascii 值?只需使用print() 即可打印出十进制形式。
    • 我相信print(event.unicode) 会做到这一点,但看起来这仅在KEYDOWN 事件中可用,如here 所示(请参阅页面下方的黄色框),所以让确保您检查的是那些而不是 KEYUP 事件。
    • 我正在创建一个应用程序,用户在其中输入文本框并按下回车键。框中的文本分配给变量command。然后我打电话给os.system(command)。有点像 GNOME 中的运行对话框。
    • 代码if event.key in (pygame.K_a, pygame.K_b, pygame.K_c): print(event.unicode) 完美运行!谢谢!
    • 不客气。我在编辑中添加了更多信息。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多