如何在 PyGame 中将组合键 ctrl+shift+9 转换为字符串“ctrl+(”?

Posted

技术标签:

【中文标题】如何在 PyGame 中将组合键 ctrl+shift+9 转换为字符串“ctrl+(”?【英文标题】:How do I turn the key combination, ctrl+shift+9, into the string "ctrl+(" in PyGame? 【发布时间】:2012-08-31 10:46:31 【问题描述】:

我之前使用event.unicode 执行此任务。如果我点击 shift+9,那么按键按下的事件具有 '(' 的 unicode 属性。如果我点击 shift+ alt+9,那么key down的事件有一个unicode属性'(',并且键盘也发送一个alt键的keydown,这样我就知道了一个被按下了。

但是,如果我按 ctrl+shift+9,然后按 event.unicode == u''。我如何从那里得到u'('

(类似地,对于 ctrl+shift+a,我得到'\x01'

【问题讨论】:

【参考方案1】:

好吧,当您按下 CTRL 时,所有的击键都是“改变的”,因为这是创建 CTRL 键的全部目的:发送控制指令而不是简单地文本。

如果您查看ASCII table,您会看到例如CTRL+H 如何映射到控制字符BS (Backspace)

因此,您在这里没有机会通过 CTRL+SHIFT+9 直接通过KEY_DOWN 接收'('


您必须通过pygame.key.get_pressed() 来检查按键。

    if e.type == KEYDOWN:
        k = pygame.key.get_pressed()
        m = pygame.key.get_mods()
        if m & KMOD_SHIFT and k[K_9]:
            if m & KMOD_CTRL:
                print "controlled yay!"
            else:
                print "yay!"

【讨论】:

啊,真不幸。解决方案不起作用,但我很高兴能得到一些验证,证明我在这里面临着不可能的事情。 :(【参考方案2】:

检查 Ctrl+t

`for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LCTRL]:
            if event.key == pygame.K_t:`

【讨论】:

【参考方案3】:

可能有一种更简单的方法可以做到这一点,但是您可以使用pygame.key.get_pressed() 获取键盘上所有键的状态,然后检查按下的两个键是否是 CtrlShift9 键。那么您可以手动返回字符串 Ctrl+( 而不是从函数中获取它。但不确定是否有一种非常优雅的方法。

【讨论】:

以上是关于如何在 PyGame 中将组合键 ctrl+shift+9 转换为字符串“ctrl+(”?的主要内容,如果未能解决你的问题,请参考以下文章

PostMessage如何发送Ctrl组合键

在Delphi中 如何在字符串中表示 CTRL+ENTER 组合键?

如何取消开机按ctrl+alt+delete组合键

vc中应该如何向窗口发送组合键消息

vb,如何控制键盘上的ctrl+c组合健和ctrl+v组合健,VB代码如何编写

如何在 Pygame 中将文本居中