Python Pygame新手求助:按R/G键无法切换背景色问题排查
Pygame按键切换背景无响应问题排查
我是Python和Pygame新手,以下是我的代码,预期效果为初始灰色背景,按下R键切换为红色背景、按下G键切换为绿色背景,但实际运行后按键无反应,背景色不改变,希望排查问题原因。
import pygame running = True BLACK = (0, 0, 0) GRAY = (127, 127, 127) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) YELLOW = (255, 255, 0) CYAN = (0, 255, 255) MAGENTA = (255, 0, 255) background = GRAY pygame.init() screen = pygame.display.set_mode((640, 240)) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_r: background = RED elif event.key == pygame.K_g: background = GREEN screen.fill(background) pygame.display.update() pygame.quit()
问题原因
核心错误是按键事件的判断逻辑位于事件循环外部。pygame.event.get()会一次性取出所有待处理的事件,必须在for event in pygame.event.get()的循环内部逐个处理每个事件。而你的代码中,if event.type == pygame.KEYDOWN在循环外面,此时event指向的是事件循环结束后的最后一个事件,绝大多数情况下这个事件不是KEYDOWN类型,导致按键操作完全未被处理。
修正后的代码
import pygame running = True BLACK = (0, 0, 0) GRAY = (127, 127, 127) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) YELLOW = (255, 255, 0) CYAN = (0, 255, 255) MAGENTA = (255, 0, 255) background = GRAY pygame.init() screen = pygame.display.set_mode((640, 240)) 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_r: background = RED elif event.key == pygame.K_g: background = GREEN screen.fill(background) pygame.display.update() pygame.quit()
内容的提问来源于stack exchange,提问作者Lord_of_the_apes
相关产品推荐
相关产品推荐

