Pygame II: Creando una ventana

Publicado por el 14/02/2010 | 9 Comentarios

Seguimos con los tutoriales de Pygame, después de aprender a importar e inicializar, vamos a lo que es realmente divertido. En este tutorial aprenderemos a crear una ventana, así que abrimos nuestro archivo donde ya tenemos empezado nuestro programa y continuamos.

Creando una ventana

Lo primero que necesitamos es definir las constantes del ancho y alto de la ventana, yo estas las defino como constantes porque de momento no vas a hacer cosas complicadas con cambios de resolución ni nada por el estilo y tenerlas como constantes ayuda a trabajar con ellas desde cualquier clase o función.

WIDTH = 640
HEIGHT = 480

Ahora pasamos a crear la ventana, se debe crear dentro de la función main(), es tan fácil como lo siguiente:

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pruebas Pygame")

La primera linea crea una ventana, date cuenta que la pasamos la tupla (WIDTH, HEIGHT) para definir las dimensiones de la ventana. La segunda línea sirve para definir el título de la ventana.

El programa nos queda así:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos
import pygame
from pygame.locals import *

# Constantes
WIDTH = 640
HEIGHT = 480

# Clases
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------

# Funciones
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------

def main():
	screen = pygame.display.set_mode((WIDTH, HEIGHT))
	pygame.display.set_caption("Pruebas Pygame")
	return 0

if __name__ == '__main__':
	pygame.init()
	main()

Si lo ejecutas te darás cuenta que se crea una ventana, pero esta desaparece al instante. Esto es debido a que necesitamos crear un bucle infinito, que será el bucle del juego. Lo creamos justo después de la creación de la ventana.

while True:
	pass

Como vemos es un bucle infinito vacío que se ejecuta eternamente y hace que la ventana no se cierra, pero ¡sorpresa!, ahora no hay forma de cerrar la ventana si no es matando el proceso. La solución consiste en que el bucle infinito compruebe si queremos cerrar la ventana y en ese caso que deje de ejecutarse. Sustituimos las dos líneas anteriores por:

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

La primera línea del bucle recorre con un for pygame.event.get() que es una lista interna de Pygame con los eventos que se están ejecutando. En la siguiente línea comprobamos que si el tipo de evento es igual a QUIT, es decir, que si le estamos dando a la crucesita de cerrar ventana. En caso de que sí, invoca a sys.exit(0), para el que necesitamos haber importado el módulo sys, y cierra el programa. Ya tenemos la manera de crear una ventana y controlar cuando cerrarla.

El código nos queda así:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos
import sys, pygame
from pygame.locals import *

# Constantes
WIDTH = 640
HEIGHT = 480

# Clases
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------

# Funciones
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------

def main():
	screen = pygame.display.set_mode((WIDTH, HEIGHT))
	pygame.display.set_caption("Pruebas Pygame")
	while True:
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
	return 0

if __name__ == '__main__':
	pygame.init()
	main()

En el próximo tutorial aprenderemos a cargar imágenes y ponerlas en nuestra ventana.

9 Comentarios en "Pygame II: Creando una ventana"

  1. [...] el primer tutorial aprendimos a importar e inicializar, En la segunda parte a crear una ventana y en este aprenderemos a cargar imagenes y a mostrarlas en [...]

  2. [...] parte 1, parte 2 y parte 3 nos sirvieron como introducción a Pygame, aprendimos a iniciar pygame, crear ventanas y [...]

  3. rsh dice:

    Hola…estoy trabajando con idle y PyGame ..en el ejemplo, mi pantalla de PyGame no desaparece, ni cuando la quiero cerrar …no se porque, es el primer ajemplo antes de que escribas lo siguiente:
    Si lo ejecutas te darás cuenta que se crea una ventana, pero esta desaparece al instante.

    sabes pork puede pasar esto?

  4. admin dice:

    rsh, No es normal que no se te cierre al instante, no se porque sucede, lo que si es normal es que no puedas cerrarla con la cruz superior. Esto es debido a que no la hemos “programado”, sigue leyendo el tutorial y lo verás.

  5. rsh dice:

    ok ..gracias por responder

  6. Rafaelox dice:

    Si queria preguntar si se puede crar ventanas no rectangulares sino con otras formas (circulares, triangulares o figuras mescladas)

  7. admin dice:

    la forma de las ventanas, si te refieres al frame en si, pues sí con SDL al menos tienen que ser rectangulares. Es más, para hacer ventanas de otro tipo deberías tocas muy abajo el Sistema gráfico del SO que utilices o currarte una API de bajo nivel.

  8. Res dice:

    Estoy probando estos ejemplo me sale un cartel de erro que me dice
    “There s an error in your program: unexpected indent”

    yo nose si es este el problema:

    estoy usando ubuntu 10.04 y IDLE (using Python-2.6)
    al parecer tengo instalado pygames pero no lo veo y nose si esta o no.

    Desde ya que andes bien.

  9. adrigm dice:

    Res, como dice el error, es un problema de identación del código. Comprueba que no tienes mezclado espacios con tabuladores o que no te falta ningún tabulador o espacio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>