PiBooth
III. Module 1 : Afficher l'écran d'accueil
21/03/2021
Introduction :
Ici je veux :
Afficher l’écran d’accueil avec une image et un texte explicatif sur les boutons.
Désactiver la souris.
Nous allons utiliser PyGame, il y aura deux versions, la version en plein écran pour l’utilisation normale et la version en écran RESIZABLE pour les essais de programmation.
Instructions :
-
Installer la librairie.
-
Mettre à jour pip
-
python -m pip install –upgrade pip
-
Installer PyGame
pip install pygame
-
Le programme de base
test_acceuil.py
#coding:utf-8
# La librairie
import pygame
from pygame.locals import *
# les Constantes ------------------------------------------------------------------------------------------------------------
largeur_ecran = 800 # en pixel
hauteur_ecran = 600 # en pixel
pos_logo = [200, 200]
texte_accueil = "texte ici" # n accepte pas les caracteres speciaux
pos_texte = [80,150]
taille_texte = 30
couleur_texte = [0, 0, 0]
couleur_texte_back = [255, 255, 255]
couleur_ecran = [89, 152, 255] # En RGB
nom_fonte_acc = "fonts/aAtos.ttf" # En ttf ne lit pas l'otf
titre_fenetre = "titre de la fenetre"
pygame.init()
# Les mises en forme ------------------------------------------------------------------------------------------------------------
# Resolution de l ecran
# windows_surface = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
windows_surface = pygame.display.set_mode((largeur_ecran, hauteur_ecran),RESIZABLE)
# Couleur de l ecran
windows_surface.fill(couleur_ecran)
# Image de fond
image_fond = pygame.image.load("Imgs/ground.jpg")
image_fond.convert()
# Logo à afficher
logo = pygame.image.load("Imgs/logo.png") # png pour gérer la transparence
logo.convert_alpha() # Alpha garde l’information de transparence
# Fonte de la page d’acceuil
acceuil_fonte = pygame.font.Font(nom_fonte_acc, taille_texte) # Argument (« nom de la fonte », taille)
# Changer le titre qui s’affiche dans la barre en haut a gauche.
pygame.display.set_caption(titre_fenetre)
# Texte a afficher
texte_acc = acceuil_fonte.render(texte_accueil, True, couleur_texte, couleur_texte_back) # argument (texte, lissage, couleur du texte, couleur de fond optionnel)
# Boucle pour le programme ------------------------------------------------------------------------------------------------------------
launched = True
while launched :
for event in pygame.event.get() :
if event.type == pygame.QUIT :
launched = False
# corp du programme ------------------------------------------------------------------------------------------------------------
# Affichage de l’image de fond
windows_surface.blit(image_fond, [0, 0] ) # position de l’image coin en haut a gauche
# Affichage du logo
windows_surface.blit(logo, pos_logo ) # position du logo coin en haut a gauche
# Affichage du texte
windows_surface.blit(texte_acc, pos_texte ) # position du logo coin en haut a gauche
# mise a jour de l affichage
pygame.display.flip()
-
Pour organiser le programme j’ai créé 2 dossiers à la racine :
-
Imgs : qui contiendra toutes les images fixe du système, par exemple si on veut changer le logo il faudra changer le fichier « logo.png », et rien a changer dans le programme.
-
Fonts : dans lequel on mettra les fontes a utiliser, puis ensuite renseigner le nom dans le programmes.
-
-
Ce programme est fonctionnel pour cette partie. MAIS vu que je veux qu’il soit modifiable facilement, il faut créer des modules.
-
Nous allons donc créer plusieurs fichiers
-
config.ini : qui servira pour toutes les déclarations de constante du programme.
-
variables.py : qui servira pour toutes les déclarations de variable du programme. (pas utile ici mais comme ça c’est fait)
-
accueil.py : qui sera le programme en lui-même.
-
config.ini
largeur_ecran=800
hauteur_ecran=600
pos_logo=[4, 4]
texte_accueil="Bouton 1 : 1 Photo | Bouton 2 : 3 Photos | Bouton 3 : 8 Photos"
pos_texte=[80,150]
taille_texte=30
couleur_texte=[0, 0, 0]
couleur_texte_back=[255, 255, 255]
couleur_ecran=[89, 152, 255]
nom_fonte_acc ="fonts/aAtos.ttf"
titre_fenetre="PhotoBooth By KiffKizz"
acceuil.py
#coding:utf-8
# Les librairies
import pygame
from pygame.locals import *
# les Constantes ------------------------------------------------------------------------------------------------------------
dico={}
fichier=open('config.ini','r')
lignes=fichier.readlines()
for o in lignes:
sp=o.split('=')
dico[sp[0]]=sp[1]
for i in dico:
exec(i+'='+str(dico[i]))
pygame.init()
# Les mises en forme ------------------------------------------------------------------------------------------------------------
# Resolution de l ecran
# windows_surface = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
windows_surface = pygame.display.set_mode((largeur_ecran, hauteur_ecran),RESIZABLE)
# Couleur de l ecran
windows_surface.fill(couleur_ecran)
# Image de fond
image_fond = pygame.image.load("Imgs/ground.jpg")
image_fond.convert()
# Logo à afficher
logo = pygame.image.load("Imgs/logo.png") # png pour gérer la transparence
logo.convert_alpha() # Alpha garde l’information de transparence
# Fonte de la page d’acceuil
acceuil_fonte = pygame.font.Font(nom_fonte_acc, taille_texte) # Argument (« nom de la fonte », taille)
# Changer le titre qui s’affiche dans la barre en haut a gauche.
pygame.display.set_caption(titre_fenetre)
# Texte a afficher
texte_acc = acceuil_fonte.render(texte_accueil, True, couleur_texte, couleur_texte_back) # argument (texte, lissage, couleur du texte, couleur de fond optionnel)
# Boucle pour le programme ------------------------------------------------------------------------------------------------------------
launched = True
while launched :
for event in pygame.event.get() :
if event.type == pygame.QUIT :
launched = False
# corp du programme ------------------------------------------------------------------------------------------------------------
# Affichage de l’image de fond
windows_surface.blit(image_fond, [0, 0] ) # position de l’image coin en haut a gauche
# Affichage du logo
windows_surface.blit(logo, pos_logo ) # position du logo coin en haut a gauche
# Affichage du texte
windows_surface.blit(texte_acc, pos_texte ) # position du logo coin en haut a gauche
# mise a jour de l affichage
pygame.display.flip()
Voila qui est fait ! Merci a ceux qui m'on aidée sur les forum pour trouver cette solution.
En fait non ce n'est pas encore fini.....
Il faut encore transformer ce programme en module que l'on integrera au programme, je l'ai dis je veux découper au maximum pour que ce soit maintenable et évolutif.
On repart donc sur un découpage.
-
config.ini : On conserve celui que l'on a déjà
-
accueil.py : Qui sera le module a importer
-
photobooth.py : Qui sera le programme principal
acceuil.py
#coding:utf-8
# Les librairies
import pygame
from pygame.locals import *
def Aff_Acc():
# les Constantes ------------------------------------------------------------------------------------------------------------
dico={}
fichier=open('config.ini','r')
lignes=fichier.readlines()
for o in lignes:
sp=o.split('=')
dico[sp[0]]=sp[1]
for i in dico:
exec(i+'='+str(dico[i]))
pygame.init()
# Les mises en forme ------------------------------------------------------------------------------------------------------------
# Resolution de l ecran
# windows_surface = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
windows_surface = pygame.display.set_mode((largeur_ecran, hauteur_ecran),RESIZABLE)
# Couleur de l ecran
windows_surface.fill(couleur_ecran)
# Image de fond
image_fond = pygame.image.load("Imgs/ground.jpg")
image_fond.convert()
# Logo à afficher
logo = pygame.image.load("Imgs/logo.png") # png pour gérer la transparence
logo.convert_alpha() # Alpha garde l’information de transparence
# Fonte de la page d’acceuil
acceuil_fonte = pygame.font.Font(nom_fonte_acc, taille_texte) # Argument (« nom de la fonte », taille)
# Changer le titre qui s’affiche dans la barre en haut a gauche.
pygame.display.set_caption(titre_fenetre)
# Texte a afficher
texte_acc = acceuil_fonte.render(texte_accueil, True, couleur_texte, couleur_texte_back) # argument (texte, lissage, couleur du texte, couleur de fond optionnel)
# Boucle pour le programme ------------------------------------------------------------------------------------------------------------
launched = True
while launched :
for event in pygame.event.get() :
if event.type == pygame.QUIT :
launched = False
# corp du programme ------------------------------------------------------------------------------------------------------------
# Affichage de l’image de fond
windows_surface.blit(image_fond, [0, 0] ) # position de l’image coin en haut a gauche
# Affichage du logo
windows_surface.blit(logo, pos_logo ) # position du logo coin en haut a gauche
# Affichage du texte
windows_surface.blit(texte_acc, pos_texte ) # position du logo coin en haut a gauche
# mise a jour de l affichage
pygame.display.flip()
photobooth.py
#coding:utf-8
# Les librairies
# Les Modules
import acceuil
acceuil.Aff_Acc()
Voila cette fois c'est fini pour ce module. Comme vous le voyez le programme principal n'a pas beaucoup de ligne ce qui permettra lors d'une maintenance de modifier seulement le module et non le programme principal et si l'on veux ajouter un module de ne rajouter que quelques lignes dans le programme principal.
Pour ceux qui ne l'aurais pas remarqué, sous la date en haut j'aai mis les fichiers finaux de cette partie.