在Python/Pygame中获取键盘输入的好方法是什么?

4

我正在编写一个pygame程序,其中有一个字符串,无论用户输入什么内容,都会在pygame窗口中显示出来。以下是代码:

    if (event.type==pygame.KEYDOWN):
                    if (event.key==pygame.K_BACKSPACE):
                            if (len(sin)>0):
                                    sin=""
                    elif (event.key==pygame.K_RETURN):
                            if (len(sin)==11):
                                    #sin.replace("-","")
                                    running=2
                                    screen.fill(white)
                            else:
                                    body=True

                    else:
                            sin=sin+chr(event.key)
    text=font.render(sin,True,(black),white) 

一个问题是它不识别特殊字符,比如(“:”,“;”,shift字符等)。有没有更好的方法来编写这样的代码?

1个回答

2
使用event.unicode可以获取您需要的内容

... pygame.KEYDOWN事件还有其他属性unicode和scancode。unicode表示已完全转换的输入字符的单个字符字符串。...


回答您的评论,您只需检查 event.unicode 而不是 event.key
...
if (event.type==pygame.KEYDOWN):
    if (event.unicode==pygame.K_COLON): #to match a colon
        pass
    elif (event.unicode== (pygame.K_Z | pygame.KMOD_SHIFT)): #to explicitly match a capital Z instead of just a z
       pass
...

这是我目前的代码: for event in pygame.event.get(): if (event.type == KEYDOWN): str1=str1+event.unicode print str1 但由于某种原因,输入会“滞后”。 - user1840752
谢谢,我已经成功在Pygame窗口中显示它了。还有一个问题:如果我按下“退格键”,如何删除字符串中的最后一个字母?我需要将其转换为列表并弹出吗? - user1840752
你可以像操作列表一样切片字符串:比如 a = "Hello",然后 a = a[:-1] 就可以移除最后一个字符。 - g19fanatic
不要忘记将我的答案标记为正确,如果它有帮助的话 :) 这是一个小的“空”复选框,在单击或悬停时会变成绿色 :) - g19fanatic
我认为event.unicodepygame.K_Z(大小写)以及KMOD_SHIFT(你需要event.keyKMOD_LSHIFT/KMOD_RSHIFT,对吗?)在elif中是错误的。我建议进行修改,但我没有时间测试它或者立即知道正确的方法 xD。 - binki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接