PGP aka PyPresent a Presentation with Python project

Make a presentation with Python and Pygame

If you want to impress your audience you have to create something unique. You will use powerpoint? I do not think so. If you are a programmer, you want to use Python and if you want envolvment you will use the pygame libraries, right? Let’s dive into this project and show you a way, my own way, to do it, step by step.

A long journey starts from a little step. (anonymous)

First things first (the window)

The following code will make a window for you. Nothing in it, but you can close it.

import pygame as pg

# THE SCREEN SIZE AND DISPLAY + WINDOW NAME + CLOCK
def windowinit():
	"""Initialize the window with a way to quit it"""
	W, H = 800, 600
	display = pg.display.set_mode((W, H))
	pg.display.set_caption("Mario Game")
	clock = pg.time.Clock()
	crashed = False
	while not crashed:
		for event in pg.event.get():
			if event.type == pg.QUIT:
				crashed = True
		pg.display.update()
		clock.tick(60)
	pg.quit()


if __name__ == "__main__":
	windowinit()

Let’s add some text to the window

Let’s create a class Text that displays the text of single objects

class Text:
	def __init__(self, screen, t, x=0, y=0, dim = 30, color=(0,0,0)):
		self.myfont = pg.font.SysFont("Comic sans MS", dim)
		self.textsurface = self.myfont.render(t, False, color)
		screen.blit(self.textsurface,(x,y))

In the function windowinit() we will create a list of string that will be our rows of text for each slide and then we will iterate the list with a for loop that will call for each string the class Text to render the text of the string in different positions (one under the previous).

	textrows = [
				"FULL COSTING",
				"Metodo per attribuire i costi ad",
				" un oggetto di calcolo (un prodotto).",
				" -------------------------",
				"Costi diretti + indiretti",
				"Costi diretti: facili da calcolare",
				"Costi indiretti:",
				"    sono comuni a più oggetti di calcolo"
				" e quindi occorre dividere i",
				" costi comuni in base a dei criteri di riparto."
				]
	z = 0
	dim = 50
	for row in textrows:
		if z==0:
			textsurface = Text(screen, row, 0, z, 50, (0,255,0))
		else:
			textsurface = Text(screen, row, 0, z, 50, (255,255,0))
		z += dim

The whole code will be this:

import pygame as pg

# THE SCREEN SIZE AND DISPLAY + WINDOW NAME + CLOCK

pg.init()
pg.font.init()

class Text:
	def __init__(self, screen, t, x=0, y=0, dim = 30, color=(0,0,0)):
		self.myfont = pg.font.SysFont("Comic sans MS", dim)
		self.textsurface = self.myfont.render(t, False, color)
		screen.blit(self.textsurface,(x,y))


def windowinit():
	"""Initialize the window with a way to quit it"""
	W, H = 1100, 600
	screen = pg.display.set_mode((W, H))
	pg.display.set_caption("Mario Game")
	clock = pg.time.Clock()
	# ======== text =================
	textrows = [
				"FULL COSTING",
				"Metodo per attribuire i costi ad",
				" un oggetto di calcolo (un prodotto).",
				" -------------------------",
				"Costi diretti + indiretti",
				"Costi diretti: facili da calcolare",
				"Costi indiretti:",
				"    sono comuni a più oggetti di calcolo"
				" e quindi occorre dividere i",
				" costi comuni in base a dei criteri di riparto."
				]
	z = 0
	dim = 50
	for row in textrows:
		if z==0:
			textsurface = Text(screen, row, 0, z, 50, (0,255,0))
		else:
			textsurface = Text(screen, row, 0, z, 50, (255,255,0))
		z += dim
	crashed = False
	while not crashed:
		for event in pg.event.get():
			if event.type == pg.QUIT:
				crashed = True
		pg.display.update()
		clock.tick(60)
	pg.quit()


if __name__ == "__main__":
	windowinit()

Below is the first slide, now, let’s add the others.

The whole code of the program

import pygame as pg
import time

# THE SCREEN SIZE AND DISPLAY + WINDOW NAME + CLOCK
# PygamePresent
pg.init()
pg.font.init()

class Text:
	def __init__(self, screen, t, x=0, y=0, dim = 30, color=(0,0,0)):
		self.myfont = pg.font.SysFont("Comic sans MS", dim)
		self.textsurface = self.myfont.render(t, False, color)
		screen.blit(self.textsurface,(x,y))



def nextpage(numpage):
	z = 0

	for row in textrows[numpage]:
		if z==0:
			textsurface = Text(screen, row, 0, z, 50, (0,255,0))
		else:
			textsurface = Text(screen, row, 0, z, 50, (255,255,0))
		z += dim

def windowinit():
	"""Initialize the window with a way to quit it"""
	global textrows, screen, dim
	W, H = 1100, 600
	screen = pg.display.set_mode((W, H))
	pg.display.set_caption("Mario Game")
	clock = pg.time.Clock()
	# ======== text =================
	textrows = [
				
				#page 1 - This appears
				["Giovanni Gatto presenta:"],

				["FULL COSTING",
				"Metodo per attribuire i costi ad",
				" un oggetto di calcolo (un prodotto).",
				" -------------------------",
				"Costi diretti + indiretti",
				"Costi diretti: facili da calcolare",
				"Costi indiretti:",
				"    sono comuni a più oggetti di calcolo"
				" e quindi occorre dividere i",
				" costi comuni in base a dei criteri di riparto."
				],

				# Di cosa parlo?
				["Terza slide"]


				
				# end of list of lists
				]
	z = 0
	dim = 50
	numpage = 0
	for row in textrows[0]:
		if z==0:
			textsurface = Text(screen, row, 0, z, 50, (0,255,0))
		else:
			textsurface = Text(screen, row, 0, z, 50, (255,255,0))
		z += dim
	crashed = False
	while not crashed:
		for event in pg.event.get():
			if event.type == pg.QUIT:
				crashed = True
			elif event.type == pg.MOUSEBUTTONUP:
				numpage += 1
				if numpage < len(textrows):
					screen.fill((0,0,0))
					nextpage(numpage)
				elif numpage == len(textrows):
					screen.fill((0,0,0))
					Text(screen, "Fine della presentazione", 0, 50, 50, (0,255,0))
					Text(screen, "Grazie per la cortese attenzione", 0, 150, 50, (255,255,0))
					numpage = 0
					#time.sleep(2)

		pg.display.update()
		clock.tick(60)
	pg.quit()


if __name__ == "__main__":
	windowinit()

Some adjustement in the code

import pygame as pg
import time

# THE SCREEN SIZE AND DISPLAY + WINDOW NAME + CLOCK
# PygamePresent
pg.init()
pg.font.init()

class Text:
	def __init__(self, screen, t, x=0, y=0, dim = 30, color=(0,0,0)):
		self.myfont = pg.font.SysFont("Comic sans MS", dim)
		self.textsurface = self.myfont.render(t, False, color)
		screen.blit(self.textsurface,(x,y))



def nextpage(numpage):
	z = 0
	slide = textrows[numpage].splitlines()[1:]
	for row in slide:
		if z==0:
			textsurface = Text(screen, row, 0, z, 50, (0,255,0))
		else:
			textsurface = Text(screen, row, 0, z, 50, (255,255,0))
		z += dim

def windowinit():
	"""Initialize the window with a way to quit it"""
	global textrows, screen, dim
	W, H = 1100, 600
	screen = pg.display.set_mode((W, H))
	pg.display.set_caption("Mario Game")
	clock = pg.time.Clock()
	# ======== text =================
	textrows = [
"""
L'azienda
""",

"""
L'azienda è formata da:
- organizzazione
- beni economici
- persone
- fine
""",
"""
L'azienda è formata da:
- organizzazione: durevole
----------------------------------
Non si può trattare di un affare
una tantum. L'azienda è destinata
a durare a tempo indefinito.
----------------------------------
""",
"""
L'azienda è formata inoltre da:
-------------------------
- beni economici:
Si dividono in:
  - beni durevoli
  - beni a breve ciclo di utilizzo
""",
]

	z = 0
	dim = 50
	numpage = 0
	crashed = False
	nextpage(0)
	while not crashed:
		for event in pg.event.get():
			if event.type == pg.QUIT:
				crashed = True
			elif event.type == pg.MOUSEBUTTONUP:
				numpage += 1
				if numpage < len(textrows):
					screen.fill((0,0,0))
					nextpage(numpage)
				elif numpage == len(textrows):
					screen.fill((0,0,0))
					Text(screen, "FINE", 0, 50, 50, (0,255,0))
					Text(screen, "CLICK TO RESTART", 0, 150, 50, (255,255,0))
					numpage = 0
					#time.sleep(2)

		pg.display.update()
		clock.tick(60)
	pg.quit()


if __name__ == "__main__":
	windowinit()

 

Pygame's Platform Game

Other Pygame's posts

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.