Pygame error: display surface quit: Why?

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

Can anyone tell me why my app quits with:

pygame error: display Surface quit.

回答1:

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?



回答2:

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.



回答3:

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) 


回答4:

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.



回答5:

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)) 


回答6:

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



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!