Razón Artificial

La ciencia y el arte de crear videojuegos

Pygame II: Creando una ventana

Escrito por adrigm el 14 de febrero de 2010 en Desarrollo Videojuegos, Noticias, Programación | 27 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.

27 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.

  10. gustavo dice:

    hola quisiera saber como agregar la orden para pedir las medidas y el nombre desde el teclado cuando ejecute el programa,ej var1= raw_input(“alto”)

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

  12. alfredoponce dice:

    Hola, me sale un error que dice que _name_ no esta definido… ¿Dónde lo tengo que definir? Perdón, tal vez sea muy tonta la pregunta.

  13. jeanfran dice:

    hola lo puse todo bien, chequee linea por linea pero, me dice syntax error en la linea “return 0″ sabes por que sera? que debo hacer?

  14. alejandro dice:

    Hola muy buen tutorial pero tengi un pequeñin problema cuando hago todo despues del bucle y todo eso cuando corro el programa se abre la ventana se queda ahi, pero no se cierra cuando le doy a la “x” de arriba no se cierra y se queda colgado el python tengo que cerrarlo por administrador de tareas y todo eso

  15. Gabriel dice:

    como puedo centrar la ventana que me genera? :) saludos

    • Fernando dice:

      Después de tanto tiempo, veo tu pregunta y dejo la respuesta por si a alguien le es útil:

      Es muy sencillo hacer que tu ventana pygame aparezca centrada.

      Primero haces import os

      Luego, justo antes de la inea pygame.init() pones esta otra:

      os.environ[‘SDL_VIDEO_CENTERED’] = ‘1’

      Con eso la ventana pygame aparecerá centrada en el monitor

  16. Esther dice:

    como hago para agregar campos de texto? por ejemplo para poder crear un usuario en mi aplicacion… tienen algun tutorial que me ayude con eso? Muchas gracias de antemano :)

  17. […] Pygame II: Creando una ventana […]

  18. Diana dice:

    Traceback (most recent call last):
    File “Untitled”, line 32
    main()
    File “Untitled”, line 20, in main
    Screen = pygame.display.set_mode((width.height))
    AttributeError: ‘int’ object has no attribute ‘height’
    ->Porque me sale eso??

  19. jaimico dice:

    pues no funciona, le oprimo cerrar y se traba. Incluso copiando el código dado aquí

  20. Sergi dice:

    He probado varias veces de ejecutar y no se me cierra la ventana. Tengo que ir al IDLE para cerrarlo sino no se cierra.

  21. Sergi dice:

    Para que me vaya he tenido que cambiar sys.exit(0) por pygame.quit()

  22. Franco dice:

    Hola, esta bueno el tutorial gracias por el trabajo que le dedicas
    solo tengo un problema y es queme sale este error:

    Traceback (most recent call last):
    File “D:/Games/Python/Pout/plantilla.py”, line 31, in
    main()
    File “D:/Games/Python/Pout/plantilla.py”, line 26, in main
    sys.exit(0)
    NameError: global name ‘sys’ is not defined
    >>>

    me podrías decir que hago mal?

  23. fredy dice:

    Hola muy buen tutorial, queria preguntar si existe el modo de obtener la resolucion del monitor, esto es por si se desea ejecutar la aplicacion en diferentes equipos con distintas resoluciones en los monitores, es decir:
    no definirlas nosotros como en el codigo siguiente
    # Constantes
    WIDTH = 640
    HEIGHT = 480

    si no tomar la resolucion que tiene el sistema, gracias.

    Saludos.

Deja un comentario