You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Pygame中KEYDOWN事件持续循环触发的问题?

问题解决:按下Delete键仅触发一次操作

你的问题出在键盘事件的判断位置:你把KEYDOWN的判断放在了事件遍历循环的外面,主循环每执行一次,就会重复检查上一次的event对象,只要之前是Delete键的按下事件,就会持续打印内容。

正确的做法是把键盘事件的判断逻辑放到for event in pygame.event.get()的循环内部,这样每个KEYDOWN事件只会被处理一次:

import pygame
import sys

sprite = "sprite_1.jpg"
position = (20,0)
canvas = pygame.display.set_mode((952, 592))
color = (255,255,255)
exit = False 

back = pygame.image.load("th.jpg").convert_alpha()
back = pygame.transform.scale(back, (952,592))

Sprite = pygame.image.load(sprite)
Sprite.set_colorkey((255,255,255))
Sprite = pygame.transform.scale(Sprite, (35,35))

pygame.display.set_caption("Game")

while not exit:
    canvas.fill(color)
    canvas.blit(back, dest = (0,0))
    canvas.blit(Sprite, dest=position)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit = True
        # 把键盘事件判断移到事件循环内部
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DELETE:
                print("hi")

    pygame.display.update()

补充说明

  • pygame.event.get()会一次性取出当前所有的事件,遍历处理每个事件时,每个KEYDOWN事件只会被捕获一次,自然也就只会触发一次打印操作。
  • 如果放在循环外面,主循环的帧率很高,每次都会重复检查最后一个event对象,导致重复触发。

内容的提问来源于stack exchange,提问作者Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:25:23