我正在尝试创建一个类似于Microsoft word的程序,只是大大简化了程序。我需要能够知道何时按下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键更改输出的方法?

最佳答案

如果您同时查看'a'和'A'的事件,而它们都具有key 97,则可以使用unicode(如果严格打印的字符)或mod属性来区分两者。

<Event(2-KeyDown {'scancode': 0, 'window': None, 'key': 97, 'unicode': u'a', 'mod': 0})>

<Event(2-KeyDown {'scancode': 0, 'window': None, 'key': 97, 'unicode': u'A', 'mod': 1})>

注意:modshift字符事件的caps lock不同,尽管unicode相同。

关于python - Pygame知道何时按下Shift +其他键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57529603/

10-16 01:00