我有一些发生keydown事件的python代码,我基本上想知道是否可以一次按下两个键,例如ctrl + a或类似的东西。这可能吗,还是我必须找到解决方法?

最佳答案

使用pygame.key.get_mods()来获取特殊键的状态,例如Control或Shift。
get_mods()给出一个整数,您必须使用按位运算符将其与诸如KMOD_SHIFT的常量进行比较

请参阅文档:pygame.key

编辑:示例

import pygame
import pygame.locals

pygame.init()

screen = pygame.display.set_mode((300,200))

running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False
            elif event.key == pygame.K_a and pygame.key.get_mods() & pygame.KMOD_SHIFT:
                print "pressed: SHIFT + A"

pygame.quit()

顺便说一句:您可以使用KMOD_LSHIFTKMOD_RSHIFT仅测试左移或仅右移。

编辑:

顺便说一句:示例如何使用get_pressed()
  • 您必须使用K_LSHIFTK_LSHIFT来检查这两个类次。
  • 如果您一直按住SHIFT + A,则一次又一次打印“按下:SHIFT + A”。


  • import pygame
    import pygame.locals
    
    pygame.init()
    
    screen = pygame.display.set_mode((300,200))
    
    running = True
    
    while running:
    
        #
        # events
        #
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False
    
        #
        # others
        #
    
        all_keys = pygame.key.get_pressed()
    
        #print 'shift:', all_keys[pygame.K_LSHIFT], all_keys[pygame.K_RSHIFT]
    
        if all_keys[pygame.K_a] and (all_keys[pygame.K_LSHIFT] or all_keys[pygame.K_RSHIFT]):
            print "pressed: SHIFT + A"
    
    pygame.quit()
    

    BTW:仅当以前使用get_pressed()时, get_mods()pygame.event.get()才会提供实际信息。

    编辑:

    如何识别A,CTRL + A,SHIFT + A,ALT + A,CTRL + SHIFT + A,CTRL + ALT + A,SHIFT + ALT + A 、、 CTRL + SHIFT + ALT + A
    import pygame
    import pygame.locals
    
    pygame.init()
    
    screen = pygame.display.set_mode((300,200))
    
    running = True
    
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False
    
                elif event.key == pygame.K_a:
    
                    mods = pygame.key.get_mods()
    
                    if mods & pygame.KMOD_CTRL and mods & pygame.KMOD_SHIFT and mods & pygame.KMOD_ALT:
                        print "pressed: CTRL+SHIFT+ALT + A"
                    elif mods & pygame.KMOD_CTRL and mods & pygame.KMOD_SHIFT:
                        print "pressed: CTRL+SHIFT + A"
                    elif mods & pygame.KMOD_CTRL and mods & pygame.KMOD_ALT:
                        print "pressed: CTRL+ALT + A"
                    elif mods & pygame.KMOD_SHIFT and mods & pygame.KMOD_ALT:
                        print "pressed: SHIFT+ALT + A"
                    elif mods & pygame.KMOD_SHIFT:
                        print "pressed: SHIFT + A"
                    elif mods & pygame.KMOD_CTRL:
                        print "pressed: CTRL + A"
                    elif mods & pygame.KMOD_ALT:
                        print "pressed: ALT + A"
                    else:
                        print "pressed: A"
    
    
    pygame.quit()
    

    顺便说一句:在我的计算机上,Right Alt有问题,因为它用于 native 字符。它不适用于KMOD_ALTKMOD_RALT

    关于Python按键组合(Ctrl +键或Shift +键),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24923078/

    10-11 22:05
    查看更多