Pygame窗口无提示崩溃求助:窗口空白交互即无响应
Pygame窗口空白无响应问题排查与修复
核心问题分析
- 无限嵌套循环阻塞主流程:主循环内的
while page == 0及其他page值的循环是死循环,page初始值为0且循环内部未修改page或done变量,程序会一直卡在该循环,永远执行不到屏幕填充、绘制、刷新代码,导致窗口空白。同时事件处理仅在主循环开头执行一次,后续无法处理新事件,交互时窗口无响应。 - 缺失颜色常量定义:代码使用
RED绘制矩形,但未定义该常量(仅定义了WHITE和LYELLOW),运行时会抛出NameError。 - 叉号绘制坐标错误:当前两条线坐标完全相同,且位置在红色矩形上方,即便执行到绘制代码,也无法显示正确的内部叉号。
修复后的代码示例
# Imports import pygame import math import sys import os pygame.init() # Setting variables and constants PI = math.pi WHITE = (255, 255, 255) LYELLOW = (255, 255, 165) RED = (255, 0, 0) # 补充RED颜色定义 BLACK = (0, 0, 0) # 补充BLACK颜色定义 size = (1050, 750) done = False page = 0 test = 0 # Other admin screen = pygame.display.set_mode(size) pygame.display.set_caption("Coursework Program, Benjamin Youell-Wright") clock = pygame.time.Clock() # Main Program while not done: # 每次循环都处理事件,保证响应及时 for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 示例:按键切换page if event.type == pygame.KEYDOWN: if event.key == pygame.K_1: page = 1 elif event.key == pygame.K_0: page = 0 # 用if判断替代while死循环,避免阻塞主流程 if page == 0: test = 0 elif page == 1: test = 0 elif page == 2: test = 0 elif page == 3: test = 0 elif page == 4: test = 0 # 绘制流程:先填充背景,再绘制元素,最后刷新显示 screen.fill(WHITE) # 绘制红色矩形按钮 pygame.draw.rect(screen, RED, [775, 595, 20, 20], 2) # 绘制矩形内部的叉号(两条对角线) pygame.draw.line(screen, BLACK, [779, 599], [791, 611], 1) pygame.draw.line(screen, BLACK, [791, 599], [779, 611], 1) pygame.display.flip() clock.tick(20) pygame.quit()
关键修复说明
- 替换死循环为条件判断:将
while page == x改为if page == x,确保主循环能完整执行所有逻辑,不会阻塞。如需切换page,可在事件处理中添加触发逻辑(如按键切换)。 - 补充缺失的颜色常量:添加
RED和BLACK的定义,避免运行时报错。 - 修正叉号坐标:调整线条坐标,让两条对角线位于红色矩形内部,形成正确的叉号样式。
- 保证事件处理及时性:事件处理放在主循环最前端,确保程序能及时响应窗口关闭、按键等操作。
内容的提问来源于stack exchange,提问作者BMango Gherkins
相关产品推荐
相关产品推荐

