La pantalla de Pygame se congela cuando la cierro

El código carga una ventana de pantalla de pygame, pero cuando hago clic en la X para cerrarla, deja de responder. Estoy ejecutando en un sistema de 64 bits, utilizando un python de 32 bits y un pygame de 32 bits.

from livewires import games, color games.init(screen_width = 640, screen_height = 480, fps = 50) games.screen.mainloop() 

La respuesta de Mach1723 es correcta, pero me gustaría sugerir otra variante de un bucle principal:

 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. 

Recomiendo el siguiente código. En primer lugar, incluye el reloj para que su progtwig no coma la CPU haciendo nada más que sondear los eventos. Segundo, llama a pygame.quit () que evita que el progtwig se congele cuando se ejecuta bajo IDLE en 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 () 

Este es un problema bastante simple, necesita manejar el evento “QUIT”, consulte la documentación del evento en: http://www.pygame.org/docs/ref/event.html

EDITAR: Se me ocurre ahora que puede estar manejando el evento “QUIT” y no funciona, pero sin más detalles de su código, no lo sé.

Un ejemplo rápido de una forma sencilla de manejar el evento “QUIT”:

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

Al usar pygame, tienes que manejar todos los eventos, incluido QUIT, por lo que si no controlas el evento quit, tu progtwig no se cerrará. Aquí hay un código.

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

Para que una ventana de pygame se pueda cerrar es simple, haga un bucle de juego con la función while True: en este caso, use la función for event in pygame.event.get(): para crear un bucle for, a continuación agregue el código if event.type == QUIT: si ya ha creado un bucle ‘while True’, solo necesita agregar el último fragmento de código. Ahora agregue en pygame.quit() y sys.exit() , aquí está el código terminado:

 while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() 

Tenga en cuenta que primero necesita importar pygame y sys.