Can anyone tell me why my app quits with:
pygame error: display Surface quit.
Can anyone tell me why my app quits with:
pygame error: display Surface quit.
I had similar problem and discovered that Surface objects don't like to be deepcopied. When I used copy.deepcopy() on such object and then accessed the copy, I got that strange error message (without calling pygame.quit()). Maybe you experience similar behavior?
From http://archives.seul.org/pygame/users/Nov-2006/msg00236.html :
On Thu, 2006-11-30 at 21:27 -0300, Nicolas Bischof wrote:
pygame.error: display Surface quit what does that mean?, i can't fix it
This means a call was made to pygame.display.quit() or pygame.quit(). If you try to do anything to the display surface after quit you will get this error.
I had a similar problem in a very simple piece of code:
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 width: speed[0] = -speed[0] if ballrect.top height: speed[1] = -speed[1] screen.fill(black) screen.blit(ball, ballrect) pygame.display.flip() pygame.time.delay(5)
Error message was:
Traceback (most recent call last): File "", line 1, in File "bounce.py", line 22, in screen.fill(black) pygame.error: display Surface quit
So I put
import pdb
at the top after
pygame.init()
and used
pdb.set_trace()
after the line with
pygame.quit()
Now I ran the program, clicked to close the window and was actually a bit surprised to see that I fell into the debugger (after all, I expected the quit to completely take me out immediately). So I concluded that the quit doesn't actually stop everything at that point. Looked like the program was continuing beyond the quit, was reaching
screen.fill(black)
and this was causing the problem. So I added
break
after the
pygame.quit()
and all works happily now.
[ Added later: It occurs to me now that
pygame.quit()
is quitting the module, and not the program that is running, so you need the break to get out of this simple program. ]
Just for the record, this means the good version is
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 width: speed[0] = -speed[0] if ballrect.top height: speed[1] = -speed[1] screen.fill(black) screen.blit(ball, ballrect) pygame.display.flip() pygame.time.delay(5)
I had:
import copy,pygame,sys from pygame.locals import * EMPTY_IMG= pygame.image.load('C:super/fancy/file/path/transparent.png') held_image=copy.deepcopy(EMPTY_IMG) my_rect=held_image.get_rect() my_rect.center = (50,50) screen.blit(held_image,my_rect)
And I got the same error.
I simply changed the copy.deepcopy(EMPTY_IMG) to just EMPTY_IMG.
import copy,pygame,sys from pygame.locals import * EMPTY_IMG= pygame.image.load('C:super/fancy/file/path/transparent.png') held_image=EMPTY_IMG my_rect=held_image.get_rect() my_rect.center = (50,50) screen.blit(held_image,my_rect)
Then it all worked fine.
I had this problem too, but got it from another origin.
I had a class defined like this:
class PauseMenu(pygame.Surface)
i got the error when forgetting to initialize the pygame.Surface and trying to blit it, making pygame.screen crash and gave me this error.
so i just added this obviously
pygame.Surface.__init__(self, (width, height))
import pygame, sys running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() # quit the screen running = False sys.exit()
call sys.exit() after pygame.quit() to stop the program so you can not change the surface after you have quit pygame and not get the error