Pygame错误:显示表面退出:为什么?

Dev*_*evo 5 python pygame

任何人都可以告诉我为什么我的应用程序退出:

pygame错误:显示表面退出.

Mac*_*sik 10

我有类似的问题,发现Surface对象不喜欢深度复制.当我在这样的对象上使用copy.deepcopy()然后访问副本时,我得到了那个奇怪的错误消息(没有调用pygame.quit()).也许你会遇到类似的行为?

  • 我可以证实这一点. (5认同)

小智 6

替换if event.type == pygame.quit():if event.type == pygame.QUIT:


Rob*_*ert 5

我在一段非常简单的代码中遇到了类似的问题:

    import sys, pygame
    pygame.init()

    size = width, height = 640, 480
    speed = [2, 2]
    black = 0, 0, 0

    screen = pygame.display.set_mode(size)
    ball = pygame.image.load("Golfball.png")
    ballrect = ball.get_rect()
    while 1:
        event = pygame.event.poll()
        if event.type == pygame.QUIT:
                pygame.quit()

        ballrect = ballrect.move(speed)
        if ballrect.left < 0 or ballrect.right > width:
            speed[0] = -speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = -speed[1]
        screen.fill(black)
        screen.blit(ball, ballrect)
        pygame.display.flip()
        pygame.time.delay(5)
Run Code Online (Sandbox Code Playgroud)

错误消息是:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "bounce.py", line 22, in <module>
        screen.fill(black)
    pygame.error: display Surface quit
Run Code Online (Sandbox Code Playgroud)

所以我把

    import pdb
Run Code Online (Sandbox Code Playgroud)

在顶部之后

    pygame.init()
Run Code Online (Sandbox Code Playgroud)

并使用

    pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

在行之后

    pygame.quit()
Run Code Online (Sandbox Code Playgroud)

现在我运行程序,点击关闭窗口,看到我掉进调试器实际上有点惊讶(毕竟,我预计退出会立即将我完全带出)。所以我得出结论,退出实际上并没有在那时停止一切。看起来程序在退出之后还在继续,正在达到

    screen.fill(black)
Run Code Online (Sandbox Code Playgroud)

这导致了问题。所以我加了

    break
Run Code Online (Sandbox Code Playgroud)

之后

    pygame.quit()
Run Code Online (Sandbox Code Playgroud)

现在一切都很愉快。

[后来补充:我现在想到的是

    pygame.quit()
Run Code Online (Sandbox Code Playgroud)

正在退出模块,而不是正在运行程序,因此您需要休息一下才能退出这个简单的程序。]

只是为了记录,这意味着好的版本是

    import sys, pygame
    pygame.init()

    size = width, height = 640, 480
    speed = [2, 2]
    black = 0, 0, 0

    screen = pygame.display.set_mode(size)
    ball = pygame.image.load("Golfball.png")
    ballrect = ball.get_rect()
    while 1:
        event = pygame.event.poll()
        if event.type == pygame.QUIT:
                pygame.quit()
                break

        ballrect = ballrect.move(speed)
        if ballrect.left < 0 or ballrect.right > width:
            speed[0] = -speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = -speed[1]
        screen.fill(black)
        screen.blit(ball, ballrect)
        pygame.display.flip()
        pygame.time.delay(5)
Run Code Online (Sandbox Code Playgroud)


Ham*_*jan 1

来自http://archives.seul.org/pygame/users/Nov-2006/msg00236.html

2006 年 11 月 30 日星期四 21:27 -0300,Nicolas Bischof 写道:

pygame.error:显示 Surface quit 这是什么意思?,我无法修复它

这意味着调用了 pygame.display.quit() 或 pygame.quit()。如果您在退出后尝试对显示表面执行任何操作,则会收到此错误。