如何在 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()
获取键盘上所有键的状态,然后检查按下的两个键是否是 Ctrl 、Shift 和 9 键。那么您可以手动返回字符串 Ctrl+( 而不是从函数中获取它。但不确定是否有一种非常优雅的方法。
【讨论】:
以上是关于如何在 PyGame 中将组合键 ctrl+shift+9 转换为字符串“ctrl+(”?的主要内容,如果未能解决你的问题,请参考以下文章
在Delphi中 如何在字符串中表示 CTRL+ENTER 组合键?