【问题标题】:pygame get key pressed as a stringpygame 将按键作为字符串按下
【发布时间】:2020-01-27 16:58:21
【问题描述】:

我想根据用户按下的键更改控制屏幕中的文本。 如何将pygame.event.get() 转换为显示按下哪个键的字符串?

最好没有很多 if 语句

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        slectedKey = # get key name as a string
        print(slectedKey)

【问题讨论】:

  • print(pygame.key.name(event.key))

标签: python pygame


【解决方案1】:

按下的代码可以通过event.key属性获取。 密钥的 unicode 表示可以通过 event.unicode 属性获得。 请参阅pygame.event 模块。

可以通过pygame.key.name() 获取不友好的密钥名称:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:

        print(pygame.key.name(event.key))

注意,如果要评估是否按下了某个键,请将event.keypygame.key 模块中定义的常量进行比较:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            # [...]
        elif event.key == pygame.K_RIGHT:
            # [...]

或者将密钥存储在一个变量中,并在应用循环中持续使用:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        slectedKey = event.key

if slectedKey == pygame.K_UP:
    # [...]
elif slectedKey == pygame.K_DOWN:
    # [...]

如果你想评估一个键是否被按住,使用pygame.key.get_pressed():

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False

keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE]:
    # [...]
elif keys[pygame.K_a]:
    # [...]

【讨论】:

  • keydown 事件还有一个unicode 属性,可以直接使用。它会出现特殊键的事件,.key 属性无论如何都是不正确的(例如向上箭头键的代码“273”)
  • 左 shift 键返回什么(Unicode 或其他)?为什么不使用key.name
  • so event.key 给了一个数字,event.unicode 给了我钥匙,但对箭头键并没有真正的作用(它将它们返回为空白)
  • 是的,我想我可以对没有可表示标志的键执行此操作,然后只需 else: slectedKey = event.unicode
  • 参见pygame.org/docs/ref/key.html#pygame.key.name:“从键盘按钮 ID 常量中获取按钮的描述性名称。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多