【问题标题】:What is a good way to get keyboard Input in Python/Pygame? [duplicate]在 Python/Pygame 中获取键盘输入的好方法是什么? [复制]
【发布时间】:2012-12-22 20:50:50
【问题描述】:

我正在制作一个 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) 

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

【问题讨论】:

    标签: python input pygame


    【解决方案1】:

    使用event.unicodeget what you are looking for

    ... pygame.KEYDOWN 事件有一个额外的属性 unicode,并且 扫描码。 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
    ...
    

    【讨论】:

    • 这是我目前所拥有的:对于 pygame.event.get() 中的事件:if (event.type == KEYDOWN): str1=str1+event.unicode print str1 但出于某种原因输入“滞后”
    • 谢谢我让它显示在pygame窗口上,还有一个问题:如果我做了“退格”,我将如何删除字符串中的最后一个字母?我需要将其转换为列表并弹出吗?
    • 您可以像任何列表一样对字符串进行切片:又名a = "Hello" 然后a = a[:-1] 删除最后一个字符
    • 如果对您有帮助,请不要忘记将我的答案标记为正确 :) 单击或悬停时变为绿色的小“空”复选标记 :)
    • 我认为event.unicodepygame.K_Z(大写)和KMOD_SHIFT(你需要event.keyKMOD_LSHIFT/KMOD_RSHIFT,对吗?)在elif错了。我会建议进行编辑,但我没有时间对其进行测试或知道正确的方法 xD。
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 2022-01-22
    相关资源
    最近更新 更多