Python Pygame知道何时轮班+;按下另一个键

Python Pygame知道何时轮班+;按下另一个键,python,pygame,keyboard-events,Python,Pygame,Keyboard Events,我正在尝试创建一个类似于MicrosoftWord的程序,只是大大简化了。我需要能够知道何时按下shift+(任何键),并显示所按下内容的正确值(通过shift从正常键更改为正常键) 目前,我最好的方法是简单地找出是否按下了shift键,然后每当按下另一个键时,将从按下的键输出的数字更改为一个新值,我可以调用chr()将其更改为该键的移位值 import pygame as py import sys py.init() screen = py.display.set_mode((400,4

我正在尝试创建一个类似于MicrosoftWord的程序,只是大大简化了。我需要能够知道何时按下shift+(任何键),并显示所按下内容的正确值(通过shift从正常键更改为正常键)

目前,我最好的方法是简单地找出是否按下了shift键,然后每当按下另一个键时,将从按下的键输出的数字更改为一个新值,我可以调用chr()将其更改为该键的移位值

import pygame as py
import sys

py.init()

screen = py.display.set_mode((400,400))

clock = py.time.Clock()

font = py.font.match_font('Ariel')


def display_text(font,text,size,color,x,y):
    #just a way to display the text to the screen
    fontS = py.font.Font(font,size)
    rendering = fontS.render(text,True,color)
    text_rect = rendering.get_rect()
    text_rect.topleft = (x,y)
    screen.blit(rendering,text_rect)


going = True
display = ''

while going:
    screen.fill((0,0,0))

    for event in py.event.get():
        if event.type == py.QUIT:
            py.quit()
            sys.exit()
        if event.type == py.KEYDOWN:

            #event keys from 32-126 are the ones that actually have a
            #character that you would type (ie that will prevent a SHIFT
            #from being displayed

            if event.key in range(32,127):

                pressedKeys = py.key.get_pressed()
                #find if a shift key is pressed
                if pressedKeys[py.K_RSHIFT] or pressedKeys[py.K_LSHIFT]:

                    #all below is handling for changing what the event key
                    #was to what it should be for when shift is pressed

                    if event.key in range(97,123):
                        event.key -= 32

                    if event.key in range(51,54):
                        event.key -= 16

                    if event.key == 50:
                        event.key = 64

                    if event.key == 49:
                        event.key = 33

                    if event.key == 54:
                        event.key = 94

                    if event.key == 55:
                        event.key = 38

                    if event.key == 56:
                        event.key = 42

                    if event.key == 57:
                        event.key -= 17

                display = chr(event.key)#change the number from event.key
                                        #into text

    display_text(font,display,40,(255,255,255),100,100)
    py.display.flip()
    clock.tick(60)
问题是有一堆不同的键,处理它们所需的语句数量太多,打字太麻烦,而且太长。每个字符,例如。按下shift时更改为>,必须考虑所有因素


是否有办法检测何时按下shift键并自动更新输出?有没有其他图书馆可以这样做?或者我必须根据是否按下shift键继续使用当前更改输出的方法吗?

如果您查看“a”和“a”的事件,而两者都有
97,则可以使用
unicode
(如果严格可打印字符)或
mod
属性来区分

注意:
mod
对于
shift
caps lock
字符事件是不同的,尽管
unicode
将是相同的。

src=r“`1234567890-=qwertyuiop[]\asdfghjkl;\'zxcvbnm,。/”
src = r"`1234567890-=qwertyuiop[]\asdfghjkl;\'zxcvbnm,./"
dest = r'~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?'
ch = chr(event.key)
pressed = py.key.get_pressed()
if pressed[py.K_RSHIFT] or pressed[py.K_LSHIFT] and ch in src:
    ch = dest[src.index(ch)]
dest=r'~!@$%^&*()QWERTYUIOP{}ASDFGHJKL:“ZXCVBNM?” ch=chr(事件键) 按下=py.key.get_pressed() 如果按下[py.K_RSHIFT]或[py.K_LSHIFT]并在src中切换: ch=目的地[src.索引(ch)]
前缀r在字符列表之前做什么?它使\“角色不需要转义。也就是说,它被视为普通角色。由于这篇评论,我在代码中发现了一个错误,我已经纠正了它。您如何能够看到整个事件?另外,使用您的答案解决我的问题的一个简单方法是只调用event.unicode而不是event.key。这使它变得容易多了,而且我使用的东西不需要mod。@YarnSaw我只是在pygame事件中使用了
print