如何在Python中实现多击键功能

如何在Python中实现多击键功能,python,python-3.x,pygame,Python,Python 3.x,Pygame,我使用的是Python3.5,我想实现多击键功能。我想制作一个注意到Ctrl+Q的函数,但我的程序没有注意到 这是我的密码: import threading, pygame from pygame.locals import * from time import sleep pygame.init() screen = pygame.display.set_mode((1160, 640), 0, 0) screen.fill((255, 255, 255)) pygame.display

我使用的是Python3.5,我想实现多击键功能。我想制作一个注意到Ctrl+Q的函数,但我的程序没有注意到

这是我的密码:

import threading, pygame
from pygame.locals import *
from time import sleep

pygame.init()
screen = pygame.display.set_mode((1160, 640), 0, 0)
screen.fill((255, 255, 255))

pygame.display.flip()

def background():
    number = 0
    while True:
        if number < 10:
            number = number + 1
            print(number)
            sleep(1)
        else:
            print("10 seconds are over!")
            break

def foreground():
    while True:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.key.get_mods() & pygame.KMOD_CTRL and pygame.K_q:
                    print('HELLO_WORLD')


b = threading.Thread(name='background', target=background)
f = threading.Thread(name='foreground', target=foreground)

b.start()
f.start()

但它没有注意到Ctrl+Q


我该怎么做?

这里有一个可能的代码修复程序:

import threading
import pygame
from pygame.locals import *
from time import sleep
import sys

pygame.init()
screen = pygame.display.set_mode((1160, 640), 0, 0)
screen.fill((255, 255, 255))
pygame.display.flip()


def background():
    number = 0
    while True:
        if number < 10:
            number = number + 1
            print(number)
            sleep(1)
        else:
            print("10 seconds are over!")
            break


def foreground():
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if pygame.key.get_mods() & pygame.KMOD_CTRL and event.key == pygame.K_q:
                    print('HELLO_WORLD')

            pygame.display.update()


b = threading.Thread(name='background', target=background)
b.start()
foreground()
导入线程
导入pygame
从pygame.locals导入*
从时间上导入睡眠
导入系统
pygame.init()
screen=pygame.display.set_模式((1160640),0,0)
屏幕填充((255、255、255))
pygame.display.flip()
def background():
数字=0
尽管如此:
如果数字小于10:
数字=数字+1
打印(数字)
睡眠(1)
其他:
打印(“10秒结束!”)
打破
def前台():
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
elif event.type==pygame.KEYDOWN:
如果pygame.key.get_mods()&pygame.KMOD_CTRL和event.key==pygame.K_q:
打印('HELLO_WORLD')
pygame.display.update()
线程(name='background',target=background)
b、 开始()
前景()

虽然这个问题可能会变得有趣,但你没有提供太多相关信息。ie:全局击键还是小部件的击键?任何特定平台或平台独立。。。但最重要的是,@BPL我编辑了我的问题。没有修复导致问题的bug。问题出在检查按下哪个键的if语句中。@MikeyB你是什么意思?在发布我的答案之前,我已经测试过这个东西,它正在工作,哦,等等,我没有看到你对IF语句的更改。我现在看到两种情况。错误是那一行代码。我会记下我的答案。@BPL我编辑了我的问题。你能回答我的另一个问题吗?@HoseongJeon当然,我可以试一试。但是一定要把新内容放到一个新的线程中,这就是StackOverflow的工作方式。每个线程1个问题
def foreground():
    while True:
        key = pygame.key.get_pressed()
        if key[pygame.key.get_mods() & pygame.KMOD_CTRL and pygame.K_q]:
            print('HELLO_WORLD')
import threading
import pygame
from pygame.locals import *
from time import sleep
import sys

pygame.init()
screen = pygame.display.set_mode((1160, 640), 0, 0)
screen.fill((255, 255, 255))
pygame.display.flip()


def background():
    number = 0
    while True:
        if number < 10:
            number = number + 1
            print(number)
            sleep(1)
        else:
            print("10 seconds are over!")
            break


def foreground():
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if pygame.key.get_mods() & pygame.KMOD_CTRL and event.key == pygame.K_q:
                    print('HELLO_WORLD')

            pygame.display.update()


b = threading.Thread(name='background', target=background)
b.start()
foreground()