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.
[…] 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.
No se cierra al instante por la linea pygame.init() que inicia todos los modulos de pygame y se tarda al cerrarlos…
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.
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.
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.
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”)
[…] parte 1, parte 2 y parte 3 nos sirvieron como introducción a Pygame, aprendimos a iniciar pygame, crear ventanas y […]
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.
if __name__ == ‘__main__':
pygame.init() # aqui defines
main();
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?
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
como puedo centrar la ventana que me genera? :) saludos
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
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 :)
[…] Pygame II: Creando una ventana […]
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??
pues no funciona, le oprimo cerrar y se traba. Incluso copiando el código dado aquí
He probado varias veces de ejecutar y no se me cierra la ventana. Tengo que ir al IDLE para cerrarlo sino no se cierra.
Para que me vaya he tenido que cambiar sys.exit(0) por pygame.quit()
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?
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.
Como hago esto?