<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.electroniciens.cnrs.fr/index.php?action=history&amp;feed=atom&amp;title=Timer_partie_1</id>
	<title>Timer partie 1 - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.electroniciens.cnrs.fr/index.php?action=history&amp;feed=atom&amp;title=Timer_partie_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.electroniciens.cnrs.fr/index.php?title=Timer_partie_1&amp;action=history"/>
	<updated>2026-06-23T02:56:56Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.electroniciens.cnrs.fr/index.php?title=Timer_partie_1&amp;diff=4088&amp;oldid=prev</id>
		<title>William.benharbone le 20 septembre 2019 à 22:17</title>
		<link rel="alternate" type="text/html" href="https://wiki.electroniciens.cnrs.fr/index.php?title=Timer_partie_1&amp;diff=4088&amp;oldid=prev"/>
		<updated>2019-09-20T22:17:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div&amp;gt;[[Accueil]] - [[Les_Groupes_ARM|Les Groupes ARM]] - [[Les_Groupes_ARM_:_Raspberry_Pi|Raspberry Pi]] - [[Les_Groupes_ARM_:_Raspberry_Pi2|Raspberry Pi2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Les_Groupes_ARM_:_Distribution_Raspian_personnalisée_Du_réseau|Distribution_Raspian_personnalisée_Du_réseau]] - [[Les_Groupes_ARM_:_Raspberry_un_datalogger_de_A..à..Z|Raspberry un datalogger de A..à..Z]] - [[Interface PyGAME|Interface PyGAME]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour apprendre notre [[Interface_PyGAME]], nous allons créer notre premier &amp;quot;Timer&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
= Une horloge :-) =&lt;br /&gt;
&lt;br /&gt;
Si vous ne l&amp;#039;aviez pas déjà fait, créons l&amp;#039;arborescence des dossiers :&lt;br /&gt;
&lt;br /&gt;
Pour Raspbian/Debian/Linux&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~$ mkdir helloworld              # Création du dossier racine pour notre premier programme helloworld&lt;br /&gt;
~$ mkdir helloworld/fonts        # Création du sous-dossier pour les fonts&lt;br /&gt;
~$ mkdir helloworld/img          # Création du sous-dossier pour les images&lt;br /&gt;
~$ mkdir helloworld/src          # Création du sous-dossier pour les fichiers .svg sources&lt;br /&gt;
&lt;br /&gt;
~$ cd helloworld/fonts           # on se place dans le dossier font pour télécharger une police&lt;br /&gt;
&lt;br /&gt;
                                # on télécharge une font 100% gratuit que l&amp;#039;on nomme lcd.zip avec l&amp;#039;utilitaire wget&lt;br /&gt;
~$ wget -O lcd.zip https://dl.dafont.com/dl/?f=lcd_lcd_mono     &lt;br /&gt;
&lt;br /&gt;
~$ unzip lcd.zip                 # décompressons l&amp;#039;archive&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant que la police LCDWinTT/LCD-BOLD.TTF est présente, replaçons nous à la racine du dossier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Éditons avec l&amp;#039;éditeur &amp;quot;nano&amp;quot; le code ci-dessous et voyons comment il se comporte :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~$ nano timer.py            # on crée/édite le fichier python timer.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(abusez du CTL+C / CTRL+V ou plus explicitement copié/collé)&lt;br /&gt;
Nous utiliserons volontairement des noms de variables explicites pour vous donner des repères.&lt;br /&gt;
vous trouverez les sources sur le serveur svn : https://outils.electroniciens.cnrs.fr/electronique/Groupe_ARM/RasberryPi/PyGAME/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import datetime&lt;br /&gt;
import pygame&lt;br /&gt;
from pygame.locals import *&lt;br /&gt;
&lt;br /&gt;
# VARIABLES ############################################################&lt;br /&gt;
Titre = &amp;#039;RDE - Timer PyGAME&amp;#039;    # Titre de la fenetre&lt;br /&gt;
LargeurEcran = 800              #&lt;br /&gt;
HauteurEcran = 480              #&lt;br /&gt;
Couleurs     = 32               # 32 bits 16.7 millions de couleurs&lt;br /&gt;
&lt;br /&gt;
# Initialisation ----------------------------------------------------- #&lt;br /&gt;
pygame.init()                   # Appel de la fonction d&amp;#039;initialisation&lt;br /&gt;
&lt;br /&gt;
# Limitation dela vitesse de rafraichissement de l&amp;#039;écran - 30 fps suffisent&lt;br /&gt;
pygame.time.Clock().tick(30)&lt;br /&gt;
fpsClock = pygame.time.Clock()&lt;br /&gt;
&lt;br /&gt;
# Taille de fenetre et Titre ----------------------------------------- #&lt;br /&gt;
# pour un mode fenetré, nous déclarons notre affichage &amp;quot;fenetre&amp;quot; avec les&lt;br /&gt;
# configurations de la largeur/hauteur et nombre de couleurs&lt;br /&gt;
fenetre = pygame.display.set_mode((LargeurEcran, HauteurEcran), 0, Couleurs)&lt;br /&gt;
&lt;br /&gt;
# pour un mode plein écran, on utilisera les paramètres ci-dessous :&lt;br /&gt;
# fenetre = pygame.display.set_mode((LargeurEcran, HauteurEcran), pygame.FULLSCREEN)&lt;br /&gt;
&lt;br /&gt;
# initialisation de la police utilisé :&lt;br /&gt;
# A chaque fois que nous voudrons utiliser la police LCD-BOLD avec la taille de 40, nous ferons appel à &amp;quot;TXT_GENERIC_FONT_40&amp;quot;&lt;br /&gt;
TXT_GENERIC_FONT_40 = pygame.font.Font(&amp;#039;fonts/LCDWinTT/LCD-BOLD.TTF&amp;#039;, 40)&lt;br /&gt;
&lt;br /&gt;
# Nous pouvons en créer une autre d&amp;#039;une taille de 80 que nous nommerons &amp;quot;TXT_GENERIC_FONT_80&amp;quot;&lt;br /&gt;
taille = 80                                    # voyons avec cette variable, la déclaration de la taille de notre texte.&lt;br /&gt;
                                               # La seule limite est votre imagination... enfin sans exagérer non plus !&lt;br /&gt;
TXT_GENERIC_FONT_80 = pygame.font.Font(&amp;#039;fonts/LCDWinTT/LCD-BOLD.TTF&amp;#039;, taille)&lt;br /&gt;
&lt;br /&gt;
# Créons une fonction permettant de convertir les Secondes en  HH:MM:SS&lt;br /&gt;
def FormatSecondsToHHMMSS(seconds):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; retourne les secondes en format HH:MM:SS &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    hours = seconds // (60*60)&lt;br /&gt;
    seconds %= (60*60)&lt;br /&gt;
    minutes = seconds // 60&lt;br /&gt;
    seconds %= 60&lt;br /&gt;
    return &amp;quot;%02i:%02i:%02i&amp;quot; % (hours, minutes, seconds)&lt;br /&gt;
&lt;br /&gt;
# Nous avions vu dans l&amp;#039;exemple précedant comment afficher un texte. Pour éviter les taches répétitives, nous fabriquons une fonction :&lt;br /&gt;
def show_generic_text(fontUse, msg, couleur, pos):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; affiche le texte avec la police et la couleur a la position.&lt;br /&gt;
        format : show_generic_text(fontUse,msg,couleur,pos)&lt;br /&gt;
            fonUse = declaration de la police (ex: TXT_GENERIC_FONT_40)&lt;br /&gt;
            msg = message (ex: &amp;quot;Mon Texte&amp;quot;)&lt;br /&gt;
            color = couleur du texte (ex: [255,255,255])&lt;br /&gt;
            pos = position (ex: (X,Y))&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    TXT_GENERIC_OBJ = fontUse.render(msg, True, couleur)&lt;br /&gt;
    TXT_GENERIC_RECT = TXT_GENERIC_OBJ.get_rect()&lt;br /&gt;
    TXT_GENERIC_RECT.center = pos&lt;br /&gt;
    fenetre.blit(TXT_GENERIC_OBJ, TXT_GENERIC_RECT)&lt;br /&gt;
    # -------------------------------------------- #&lt;br /&gt;
&lt;br /&gt;
# Nous en avons fini des déclarations et allons entrer dans une boucle infini pour surveiller les actions de l&amp;#039;utilisateur&lt;br /&gt;
# Initialisation d&amp;#039;une variable de boucle&lt;br /&gt;
continuer = 1&lt;br /&gt;
&lt;br /&gt;
while continuer:&lt;br /&gt;
     # on rempli le fond de l&amp;#039;écran &amp;quot;fenetre&amp;quot; avec une couleur unie (R,V,B)&lt;br /&gt;
     fenetre.fill([100,100,100])&lt;br /&gt;
&lt;br /&gt;
     date = datetime.datetime.now()  # on récupère la date actuelle au format datetime&lt;br /&gt;
&lt;br /&gt;
     # on va convertir dans un format plus sympa notre texte&lt;br /&gt;
     TXT_TIME = (str(date.hour).zfill(2) + &amp;#039;:&amp;#039; + str(date.minute).zfill(2) + &amp;#039;:&amp;#039; + str(date.second).zfill(2))&lt;br /&gt;
     # zfill permet d&amp;#039;avoir &amp;quot;07&amp;quot; affiché au lieu de &amp;quot;7&amp;quot; il complete sur le nombre de caractères souhaité &amp;quot;zéro fill&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     # notre texte viens se placer sur le fond d&amp;#039;écran uni, on fait appel a notre fonction d&amp;#039;affichage&lt;br /&gt;
     show_generic_text(TXT_GENERIC_FONT_80, TXT_TIME, [255,255,255], (400,240))&lt;br /&gt;
&lt;br /&gt;
     # on detecte si un evenement (touche ESC) est passé&lt;br /&gt;
     for event in pygame.event.get():                 # Pour chaque évenement dans Pygame, nous analysons l&amp;#039;action&lt;br /&gt;
        if (&lt;br /&gt;
              event.type == pygame.QUIT or            # si nous cliquons la croix de la fenetre ou&lt;br /&gt;
              (event.type == pygame.KEYUP and         # si une touche du clavier est relachée&lt;br /&gt;
                event.key == K_ESCAPE)                # et que c&amp;#039;est la touche ESC&lt;br /&gt;
            ):&lt;br /&gt;
                     continuer = 0                    # alors, on arrête la boucle while et on quitte&lt;br /&gt;
                     pygame.quit()                    # On quitte pygame&lt;br /&gt;
                     sys.exit()                       # On quitte proprement notre programme&lt;br /&gt;
&lt;br /&gt;
        # sinon on rafraichi l&amp;#039;affichage avec un framerate de 30 FPS&lt;br /&gt;
     pygame.display.update()&lt;br /&gt;
     fpsClock.tick(30)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on enregistre CTRL+X puis on valide le nom du fichier Y(es) ou O(ui)&lt;br /&gt;
&lt;br /&gt;
ensuite on lance le code Pygame :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~$ python timer.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La Touche ESC ( échap ) du clavier permet de sortir ou la croix en haut de la fenetre&lt;br /&gt;
&lt;br /&gt;
Ce qui nous donne :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ecran_Timer_Pygame.png|500px|thumb|center|Fenetre affichée]]&lt;br /&gt;
&lt;br /&gt;
Revenons à notre [[Interface_PyGAME]]&lt;/div&gt;</summary>
		<author><name>William.benharbone</name></author>
	</entry>
</feed>