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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:40:19