Suscríbete vía RSS Síguenos en Twitter

Pygame II: Creando una ventana

adrigm | 14/02/2010 | 7 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.

Entradas relacionadas

7 Comentarios

1
Escrito por Pygame III: Cargar imagenes | Razón Artificial el 14 febrero 2010 a las 16:04 pm

[...] 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
Escrito por Pygame IV: Creando Sprites | Razón Artificial el 14 febrero 2010 a las 17:19 pm

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

3
Escrito por rsh el 12 marzo 2010 a las 23:48 pm

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
Escrito por admin el 14 marzo 2010 a las 2:04 am

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
Escrito por rsh el 16 marzo 2010 a las 3:47 am

ok ..gracias por responder

6
Escrito por Rafaelox el 17 mayo 2010 a las 0:57 am

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

7
Escrito por admin el 17 mayo 2010 a las 21:22 pm

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.

Deja un comentario

Su comentario: