Pygame II: Creando una ventana
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.
7 Comentarios
[...] 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 [...]
[...] parte 1, parte 2 y parte 3 nos sirvieron como introducción a Pygame, aprendimos a iniciar pygame, crear ventanas y [...]
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?
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.
ok ..gracias por responder
Si queria preguntar si se puede crar ventanas no rectangulares sino con otras formas (circulares, triangulares o figuras mescladas)
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.