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

Pygame自定义窗口类触发display Surface quit错误求助

问题1:报错的具体触发原因
  • 第一,__init__中直接对self赋值属于无效操作。Python的__init__方法里的self是已经创建完成的类实例的引用,你把它重新赋值为pygame.display.set_mode的返回值,仅会修改__init__内部的局部变量,不会改变外部实际拿到的Screen类实例,你用set_mode创建的合法显示Surface会直接被丢弃。
  • 第二,你的Screen类继承了pygame.Surface但没有调用父类的初始化方法,导致最终拿到的scr实例是未初始化的无效Surface对象,你调用_fill时操作的就是这个无效对象,pygame无法识别合法显示Surface,就抛出了对应报错。
  • 第三,你全程没有调用pygame.init()初始化pygame的核心模块,本身就会导致pygame接口调用异常。
问题2:自定义窗口类的正确实现方式

以下提供两种可行实现方案:

方案1:组合实现(更推荐,逻辑更清晰不易冲突)

ScreenClass.py 代码

import pygame
import sys

class Screen:
    """自定义窗口类"""
    def __init__(self, width: int, height: int):
        # 初始化pygame核心模块
        pygame.init()
        # 存储创建好的合法显示Surface
        self.display_surf = pygame.display.set_mode((width, height))

    def events_handler(self):
        """全局事件处理"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

    def fill(self, color):
        """填充窗口底色"""
        self.display_surf.fill(color)

    def update(self):
        """刷新窗口画面,必须调用否则填充内容不会显示到屏幕"""
        pygame.display.flip()

主程序代码

import ScreenClass
import StaticsClass # 你的颜色常量类

def main():
    scr = ScreenClass.Screen(800, 600)
    while True:
        scr.fill(StaticsClass.Color.BLACK0)
        scr.events_handler()
        scr.update()

if __name__ == '__main__':
    main()

方案2:继承实现(需要用到pygame.Surface原生方法时可选)

通过重写__new__方法替换实例创建逻辑,直接返回set_mode创建的Surface实例,同时保留自定义类的方法:

import pygame
import sys

class Screen(pygame.Surface):
    def __new__(cls, width: int, height: int):
        pygame.init()
        # 直接返回显示Surface作为类实例
        return pygame.display.set_mode((width, height))
    
    def events_handler(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

该方案下可直接调用pygame.Surface的原生fill方法,不需要额外封装,主程序中直接执行scr.fill(颜色值)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:03