Pygame window doesn't close after clicking red cross - python

I'm new to pygame. I have written the following code, but the generated window doesn't allow me to close it.
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

Looping and the game running are two different things. If you want to close the game after the loop ends, you should do so with pygame.quit(). Importing sys and adding sys.exit() as afterwards lets you exit the Python script altogether. Depending on which IDE you use, this may not happen automatically.
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((800,600))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
sys.exit()

Related

Pygame always showing a black screen

I am trying to recreate this pygame but i keep getting a black screen without anything displayed. I get no error's so i don't know where i need to start.
import pygame
from sys import exit
pygame.init()
screen = pygame.display.set_mode((800, 400))
pygame.display.set_caption("Runner")
clock = pygame.time.Clock()
test_surface = pygame.image.load('graphics/Sky.png')
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
screen.blit(test_surface,(0, 0))
pygame.display.update()
clock.tick(60)
The problem got solved after reinstalling python and pycharm. Not sure if both were needed but it did the trick for me, thanks all.

Pygame screen dosen't close

I'm a Macbook user and I have just recently started learning programming games using python.
my issue is that every time I try to close the screen it doesn't close.
import pygame
import sys
pygame.init()
width = 800
hight = 600
screen = pygame.display.set_mode((width , hight))
game_over= False
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT :
sys.exit()
When I point the cursor to the screen it turns to a circle... Cursur, so usually I just press force to quit "on the snake icone" in the dock
So how can I fix this and make the screen close just by pressing the close button ?
I'm using python 3.
Thank you.
Full edited and tested code :
import pygame
import sys
pygame.init()
width = 800
hight = 600
running = True
screen = pygame.display.set_mode((width , hight))
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT :
pygame.quit()
sys.exit()
Test on Linux mint with visual studio code. Tested more than 5 times. Expected results.

why do I get the error: pygame.error: video system not initialized

Like the title says I am confused why I get the error: pygame.error: video system not initialized
As far as i understand this error is raised if you forget to initialize your code with pygame.init() but I did, here's my code and thanks in advance:
import pygame
from pygame.locals import *
pygame.init()
screen_height = 700
screen_width = 1000
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("platformer")
# load images
sun_img = pygame.image.load("img/sun.png")
backround_img = pygame.image.load("img/sky.png")
run = True
while run:
screen.blit (backround_img,(0,0))
screen.blit(sun_img, (100, 50))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
pygame.display.update()
the error does not crash the window or anything and it works as intended
its just somewhat annoying.
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
pygame.display.update()
When the event loop happens, if you close the window, you call pygame.quit(), which quits pygame. Then it tries to do:
pygame.display.update()
But pygame has quit, which is why you are getting the message.
separate the logic out. Events in one function or method, updating in another, and drawing and updating the display in another to avoid this.

pygame.error: display Surface quit - WHY IS THIS HAPPENING? [duplicate]

This question already has answers here:
pygame window closes immediatly after opening up
(1 answer)
What is the difference between .quit and .QUIT in pygame
(2 answers)
Closed 1 year ago.
Having researched this for hours, I cannot figure out why this error is being triggered. Here is the entire message:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "snake.py", line 37, in <module>
redraw_window()
File "snake.py", line 23, in redraw_window
win.fill((0, 0, 0))
pygame.error: display Surface quit
When I run the program, the window opens and closes instantly. I'm running Python v3.7 via a conda virtual environment. And here is my code:
import pygame
pygame.init()
#----------------------------
# CONSTANTS
#----------------------------
window_width = 256
window_height = 256
win = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('Snake Game')
#----------------------------
# CLASSES
#----------------------------
#----------------------------
# REDRAW WINDOW
#----------------------------
def redraw_window():
win.fill((0, 0, 0))
pygame.display.update()
#----------------------------
# MAIN GAME LOOP
#----------------------------
running = True
while running:
# listen for window closure
for event in pygame.event.get():
if event.type == pygame.quit():
run = False
redraw_window()
pygame.quit()
I even tried passing 'win' into the redraw_window function and that changed nothing.
pygame.quit() is a function and uninitialize all PyGame modules. When you do
if event.type == pygame.quit():
the function is called and all PyGame modules are uninitialized.
The type attribute of pygame.event.Event() object indicates the type of event. You need to compare the event type to the enumeration constant that identifies the event. The quit event is identified by pygame.QUIT (see pygame.event module):
Hence, you have to compete with pygame.QUIT instead of pygame.quit():
running = True
while running:
# listen for window closure
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
redraw_window()
pygame.quit()

Pygame screen freezes when I close it

The code loads up a pygame screen window, but when I click the X to close it, it becomes unresponsive. I'm running on a 64-bit system, using a 32-bit python and 32-bit pygame.
from livewires import games, color
games.init(screen_width = 640, screen_height = 480, fps = 50)
games.screen.mainloop()
Mach1723's answer is correct, but I would like to suggest another variant of a main loop:
while 1:
for event in pygame.event.get():
if event.type == QUIT: ## defined in pygame.locals
pygame.quit()
sys.exit()
if event.type == ## Handle other event types here...
## Do other important game loop stuff here.
I'd recommend the following code. First, it includes Clock so your program doesn't eat the CPU doing nothing but polling for events. Second, it calls pygame.quit() which prevents the program from freezing when running under IDLE on windows.
# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://cs.simpson.edu/?q=python_pygame_examples
import pygame
# Define some colors
black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)
pygame.init()
# Set the height and width of the screen
size=[700,500]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("My Game")
#Loop until the user clicks the close button.
done=False
# Used to manage how fast the screen updates
clock=pygame.time.Clock()
# -------- Main Program Loop -----------
while done==False:
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done=True # Flag that we are done so we exit this loop
# Set the screen background
screen.fill(black)
# Limit to 20 frames per second
clock.tick(20)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Be IDLE friendly. If you forget this line, the program will 'hang'
# on exit.
pygame.quit ()
This is a pretty simple issue, you need to handle the "QUIT" event, see the event documentation at: http://www.pygame.org/docs/ref/event.html
EDIT:
It occurs to me now that you might be handling the "QUIT" event and its not working
but without more details to your code I dunno.
A quick example of a simple way to handle the "QUIT" event:
import sys
import pygame
# Initialize pygame
pygame.init()
pygame.display.set_mode(resolution=(640, 480))
# Simple(ugly) main loop
curEvent = pygame.event.poll()
while curEvent.type != pygame.QUIT:
# do something
curEvent = pygame.event.poll()
In using pygame, you have to handle all events including QUIT so if you don't handle the quit event, your program will not quit. Here's a code.
import sys
import pygame
from pygame.locals import *
def main():
running = True
while running:
for event in pygame.event.get():
if event.type==QUIT: #QUIT is defined at pygame.locals
runnning = False
#other game stuff to be done
if __name__=='__main__':
pygame.init()
pygame.display.set_mode((640,480))
main()

Categories

Resources