如何让Pygame窗口保持开启指定时长后自动关闭?
实现Pygame窗口定时自动关闭的方案
你的原代码缺少循环退出条件和事件处理,导致窗口会一直运行且可能无响应。以下是两种可行的实现方式,推荐第一种结合Pygame自身时间工具的方案:
方案一:使用Pygame原生时间方法(推荐)
这种方式不会阻塞事件循环,窗口能正常响应系统事件(比如手动关闭):
import pygame window_x = 600 window_y = 600 background = (255, 200, 255) # 设定窗口保持时长,单位为毫秒(示例为5秒) WAIT_DURATION = 5000 pygame.init() world = pygame.display.set_mode([window_x, window_y]) # 记录窗口初始化完成的时间点 start_time = pygame.time.get_ticks() game_on = True while game_on: # 处理系统事件,避免窗口被判定为无响应 for event in pygame.event.get(): if event.type == pygame.QUIT: game_on = False # 计算已运行时长,达到设定值则终止循环 current_time = pygame.time.get_ticks() if current_time - start_time >= WAIT_DURATION: game_on = False world.fill(background) pygame.display.flip() # 释放Pygame资源 pygame.quit()
关键说明:
pygame.time.get_ticks():返回从pygame.init()执行后到当前的毫秒数,用来精准计算时间差- 事件处理循环:必须保留,否则系统会认为窗口失去响应,可能强制关闭
pygame.quit():程序结束前调用,确保Pygame的资源被正确释放
方案二:使用time模块(不推荐)
这种方式会阻塞事件循环,窗口在等待期间无法响应任何操作,仅适合简单场景:
import pygame import time window_x = 600 window_y = 600 background = (255, 200, 255) WAIT_DURATION = 5 # 单位:秒 pygame.init() world = pygame.display.set_mode([window_x, window_y]) world.fill(background) pygame.display.flip() # 等待指定时长后直接关闭 time.sleep(WAIT_DURATION) pygame.quit()
内容的提问来源于stack exchange,提问作者Elijah Bosch
相关产品推荐
相关产品推荐

