top of page

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.

bottom of page