bclose

Introducción a Pygame

Graficos en Python y Pygame

 

 

    • Vamos a empezar a usar graficos con Python.
    • Para ello instalaremos Pygame.
    • Haremos nuestro primer programita para crear una ventana con Pygame..
 

Material requerido.

Vista lateral  Una Raspberry Pi 3, aunque valen la 2 y la 1

 

Introducción a Pygame

 

Bueno ya está bien de hacer cosas serias en estos tutoriales. Va llegando el momento de empezar a jugar, que para eso estamos en esta guerra. Para disfrutar y pasarlo bien.

Así que vamos a ver si empezamos a hacer cositas con gráficos y dado que ya tenía ganas de empezar a hablaros del Pygame, va siendo hora de que saquemos partido a una de las grandes virtudes de la Raspberry: Que es un ordenador completo con pantalla y todo y eso nos da muchas posibilidades gráficas que tenemos que aprovechar.

Vamos a dedicar unas cuantas sesiones a jugar con Pygame, una librería estándar para Python que nos da acceso a un montón de posibilidades gráficas que nos van a venir muy bien para dibujar lo que queramos en pantalla. Porque si sois como yo os resultará dificil usar un lenguaje completo sin querer dibujar cosas en la pantalla.

De paso aprovecharemos para ir viendo algunos conceptos más de Python, con el rigor que nos es propio Por su ausencia)   y a ser posible divirtiéndonos con todo esto, porque nos queda mucho Python por ver

Para empezar hay que decir que ya estáis acostumbrados a la idea de que Python es un lenguaje ampliable mediante el uso de librerías más o menos estándar. Ya hemos visto una cuantas y hemos visto que podemos usar la directiva import para incorporarlas a nuestros programas

Pygame es una librería estándar de Python pensada y diseñada para juegos, de ahí su nombre, que nos permite cosas tales como crea pantallas o ventanas jugar con sus atributos dibujar cosas de colores y animar Sprites entre otras mil aplicaciones.

Y casi siempre oirás hablar de Pygame como la librería para juegos, pero se la puede usar con gran acierto para todo lo que sean temas gráficos. Iremos viendo que Pygame dispone de funciones para dibujar y colorear casi cualquier cosa que se te ocurra y a pesar de que casi todo el mundo insiste en sus posibilidades para desarrollar juegos absurdos, también es muy útil simplemente como herramienta de dibujo y representación gráfica, y en esto nos vamos a centrar.

Por cierto como Pygame es una librería estándar soportada prácticamente en cualquier entorno que acepte Python, los programas que hagamos con ello correrán indistintamente en nuestra Raspberry, Windows o Mac o Linux sin modificación alguna .¿Qué te parece?

Por eso y porque muchos seguro que tenéis un PC con Windows y quizás algunos de los que leéis esto no tenéis una Raspberry (Que por cierto no se a que esperas) vamos a ver como instalar Python y Pygame en un PC Windows de forma que podáis seguir estas sesiones gráficas en ambos entornos.

 
  • Si tienes Mac o Linux, ambos trae versiones preinstaladas de la Menos Python y tendras que ver como instalar simplemente Pygame en tu equipo.  

 

 

 

Instalar Python + Pygame en WIndows

 

Una de las ventajas de usar Python es que puedes correr el mismo programa en diferentes sistemas operativos, sin necesidad de cambiar ni una coma (Bueno, casi siempre)

Por ejemplo, Normalmente todos tenemos otro PC además de nuestra Raspberry Pi, y estadísticamente es muy probable que tengas Windows

Por eso vamos a incluir una nota para instalar Python para Windows (o Tu Mac si es el caso). Normalmente la instalación de Python es mucho mas sencilla en Linux o Raspberry y por supuesto en Mac OSX, pero en Windows puede tener mas de una trampa por lo que resulta interesante ver que podemos instalarlo descargándolo de aquí:

En mi caso me he bajado la versión 3.6 para amd64, que es válida para sistemas AMD e Intel de 64 bits, lo que en este momento son prácticamente todos los procesadores, pero vosotros veréis si es la vuestra. Elegid con cuidado la que corresponda a vuestro procesador y lanzad el programa de instalación.

pantalla bienvenida instalacion python

Elegid la opción de instalación customizada y aseguraros de hacer click en la última línea para que añada Python al Path de Windows (Pasaran cosas raras si no lo pincháis)

Opciones de instalacion

Os ofrece instalar todo. Pulsa Next

Mas opciones de instalacion

Dale a install y responde que si a todo sin más, hasta que termine la instalación y salga esta ventana, y asegúrate de pinchar en “Disable path lengh limit”.

Mensaje de exito

Ahora nos falta instalar Pygame para Windows y me he encontrado con varios problemas para conseguir que todo funcionase correctamente. Por eso os recomiendo este sistema que es no solo el más rápido sino también el más limpio:

Abre una ventana de comandos (En modo administrador preferiblemente que no queremos historias raras). Si estas en Windows 10, simplemente haz tecla Windows + x. Te saldrá un menú especial del botón de Windows en que aparecen algunas funciones de Windows 7 que parecía que habían desaparecido, pero que solamente las habían ocultado (Para molestar, ya sabes)

Abrir ventana comandos

Esto te abrirá la típica ventana de comandos que suele asustar a los novatos pero que es ideal para que ahora escribas;

pip install pygame

Os saldrán algunos mensajes y enseguida tendréis instalado Pygame de acuerdo a vuestra versión:

INstalando pygame

Y con eso podéis ya probar los programas Python Pygame que vamos a mostrar.

La idea de todo esto es que podáis seguir estas charlas de Python, aquellos que no tengáis a mano una Raspberry, especialmente colegios y centros de formación, porque no exagero nada si os insisto en que Python es el mejor primer lenguaje posible y que es ideal para temas educativos.

 

Empezando con Pygame

 

A riesgo de ser pesados repetiremos, que Pygame es una librería estandard de Python que sirve para hacer juegos, pero que también podemos usar simplemente para crear gráficos de ventana, ya que dispone de una muy amplia colección de primitivas a nuestra disposición.

Como siempre, en esta casa creemos que es mejor empezar haciendo ejemplos que dando aburridas disertaciones teóricas. Empecemos abriendo la consola Python en nuestra Raspberry y decidle que queremos iniciar un nuevo programa.

Normalmente si has puesto al día tu Raspberry deberías tener instalado Pygame  y Python 3 sin necesidad de descargarlo. Vamos a jugar un poco creando una ventana vacía, y para ello poned este par de líneas:

import pygame,sys
from pygame.locals import *

La primera línea no os va a sorprender, significa que vamos a importar Pygame en nuestro programa y también sys para poder jugar con el Sistema

 
  • Sys es una librería que dispone de múltiples llamadas al sistema para cosas como jugar con ficheros, ver su tamaño o imprimir cosas y por costumbre vamos a cargarla poco menos que siempre porque está llena de trucos útiles. Pero no queremos entrar en muchos detalles por ahora.  
.

La segunda línea es también casi obligada, para disponer de las constantes que queremos tener a tiro para que sea más fácil de entender el programa, así que sed obedientes y no preguntéis tonterías.

Vamos a poner en marcha un sencillo ejemplo de crear una nueva ventana para nuestro programa en la que más adelante iremos dibujando cosas o pintando colores. Pero por ahora seremos modestos, nos basta con crear la ventana, ¿De acuerdo?

Lo primero tenemos que inicializar Pygame:

pygame.init()

Ahora vamos definir el tamaño de la pantalla que deseamos:

Win= pygame.display.set_mode((600,400))

Fijaros que las medidas están entre paréntesis dobles (No va a funcionar con paréntesis simples. Estáis avisados)

  • Para los que vais a por nota, que sepáis que se trata de un tuple, un tipo especial en Python de los que iremos hablando.  

Aquí podéis ya ver indicios de algo que ya en su día vimos desde Arduino. Las señales de un lenguaje orientado a objetos en los que existen métodos y propiedades, pero no me quiero liar ahora con esto.

Al final lo que esta línea hace es crear un objeto llamado Win, del tipo pygame.Surface con unas ciertas características (Un tamaño por ejemplo)

 Podemos pedirle a Pygame que nos abra esa ventana que buscamos y la ponga un texto en la barra superior para identificarla. Por ejemplo “Hola desde Prometec”:

pygame.display.set_caption("Hola desde Prometec")

Si corremos todo este programa a la vez, tendremos algo así:

Nuestra primera ventana

Hemos creado una ventana sin fondo donde podemos sacar el resultado de nuestros programas, pero no hace mucho mas. Fijaros en el texto de la barra azul de la ventana, lleva nuestro texto y además podéis mover de sitio la ventana.

El problema ahora es que no podemos ni siquiera cerrarla (Podéis intentarlo, claro), porque no le hemos dicho como.

Para ello, vamos a tener que hablar un poco de que Python es un lenguaje diseñado desde el principio para manejar objetos. Eso significa que las cosas tienen propiedades que podemos modificar, (Por ejemplo el caption que acabamos de usar con la ventana) pero tambien tiene métodos, que son el equivalente a funciones o cosas que podemos hacer con estos objetos, como por ejemplo cerrar la ventana.

En concreto existe un método para cerrar la ventana, Pero para usarlo, debemos entender lo que son los eventos de un objeto.

 

Eventos

 

Los lenguajes orientados a objetos son colecciones de programas con sus características (O propiedades) y con métodos para realizar acciones con ellos, pero también existen los eventos que son las notificaciones que tu programa recibe cuando un agente hace algo con, o en tu programa.

Por ejemplo, cuando usamos un sistema operativo moderno como Linux, Windows o Mac, muestra una ventana con tu programa en la pantalla, puede encontrarse rodeado de múltiples ventanas de otros programas sobre los que no tenemos ningún control.

Estamos acostumbrados a poder pichar en una u otra ventana y así cambiar de programa cómodamente, pero si os paráis a pensar un momento, veréis que esto genera ciertos problemas para los programas. Por ejemplo ¿Cómo se yo que alguien ha pinchado dentro de mi ventana? ¿O si me han pedido, miniar o cerrar la ventana?

La solución en todos estos sistemas operativos, es que es el sistema quien se encarga de gestionar todos los recursos del sistema (Memoria RAM, accesos al disco duro o a Internet, etc.) y nos así con un evento de diferentes tipos para informarnos de que el usuario ha realizado una cierta acción que nos interesa, o bien que el sistema responde a aúna petición que nuestro programa le ha hecho.

El concepto de programación por eventos es muy potente y de uso generalizado en estos momentos, por lo que es importante que entiendas, que tu programa no controla el sistema, sino que responde a los avisos que este te manda (Eventos) cuando se requiere tu atención para que tu programa haga algo.

Por ejemplo para hacer que nuestro programa responda cerrando la ventana que hemos creado cuando pinchen el botón de cierre, necesitamos supervisar los eventos que nos mandara el sistema cuando ocurra algo así.

Hasta ahora habíamos escrito esto:

import pygame, sys
from pygame.locals import *

pygame.init()
Display = pygame.display.set_mode((600,400))
pygame.display.set_caption("Hola esde Prometec")

Pero ahora tenemos que revisar los eventos que nos afectan y para ello podemos escribir algo como esto:

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

Lo primero es un típico bucle while True, es decir recorre este bucle indefinidamente. La siguiente línea busca en la cola de entrada, los eventos que nos ha enviado el sistema y que requieren atención,

pygame.event.get()

Naturalmente pueden ser mas de un evento (De hecho docenas continuamente) por eso debemos asegurarnos que cada uno recibe atención si nos interesan. Pero en este caso que es de lo más sencillo por ser nuestro primer programa solo nos interesa el evento de cierre de la venta y es lo que buscamos:

if event.type() == pygame.QUIT

Nuestro bucle no hace gran cosa. Solo va mirando si hay orden de cierre y cuando lo encuentra, hace eso sin más, pero ordenadamente:

pygame.quit()
 sys.exit()

El primero cierra Pygame tranquilamente y el segundo mata todo lo que hayamos dejado por ahí sin barrer, para que no se amontone la porquería. Y eso es todo.

Si lo probáis ahora, veréis como ya os deja cerrar la ventana cuando pulsamos el botón de cierre. Este parece un buen momento para grabar nuestro primer programa, con File\Save As, Llámale pygame1 , por ejemplo:

Ventana de salvado

En la próxima sesión veremos como dibujar primitivas dentro de la ventana que acabamos de crear.

 

 


Resumen de la sesión

 

 
    • Hemos Vimos como instalar Pygame en Windows y que en Raspberry viene de serie.
    • Empezamos a jugar con algunas ideas basicas de Pygame.
    • Creamos nuestro promer programa Pygame.
 

 

 

(4) Comments

    • Alfredo

    Hola Antonio,
    el problema que tienes es que no has dejado los espacios a la izquierda necesarios para cada instrucción o línea. La forma en que Python reconoce donde empieza y donde termina es con los espacios en blanco que dejamos a la izquierda.
    Copia lo siguiente, tal cual, con los mismos espacios en blanco a la izquierda, y se ejecutará bien el programa.

    import pygame, sys
    from pygame.locals import *

    pygame.init()
    Display = pygame.display.set_mode((600,400))
    pygame.display.set_caption(“Hola Mundo”)

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

    Saludos.

  • Muchas gracias tocayo.
    Ya me estaba desanimando, las primeras lecciones y ya tenía problemas.
    Gracias de nuevo.

  • buenas, hay un pequeño error en el codigo hay q eliminar los parentesis en : if event.type()==pygame.QUIT
    asi no tendras problemas

  • Buenas noches,
    Al ejecutar el programa propuesto:

    import pygame, sys
    from pygame.locals import *

    pygame.init()
    Display = pygame.display.set_mode((600,400))
    pygame.display.set_caption(“Hola esde Prometec”)

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

    Obtengo el siguiente error:
    Traceback (most recent call last):
    File “C:\Users\abernal\AppData\Local\Programs\Python\Python36\Ejercicios\01.py”, line 10, in
    if event.type() == pygame.QUIT:
    TypeError: ‘int’ object is not callable
    >>>

    He revisado el programa pero creo que está exactamente igual que en el ejercicio propuesto.
    Agradecería que le echéis un vistazo y me indiquéis dónde está el error.

Give a Reply

WordPress Anti-Spam by WP-SpamShield