Exemplo n.º 1
0
    def mettre_a_jour(self, fleche_retour):
        """ Change les informations à l'écran et la couleur du pays séléctionné
        ---
        paramètres :

            - fleche_retour (pygame.Image) la flèche de retour
        """
        model = self.mettre_a_jour_information_pays()
        # On efface la carte du monde
        creer_masque(0, 1550, 400, 120, BG, self.ecran)
        # On affiche le nom
        afficher_texte(self.ecran, model.pays.nom, (1600, 30), 60, 300, 80)
        # On "efface" le monde
        creer_masque(30, 10, 1540, 620, BG, self.ecran)
        # On redimensionne le pays
        border = redimensionner_pays(model.pays, 1500, 500, 50, 20)
        # On l'affiche
        for c in border:
            # On affiche le fond du pays
            pygame.draw.polygon(self.ecran,
                                (model.pays.r, model.pays.g, model.pays.b), c)
            # On affiche les frontières
            pygame.draw.lines(self.ecran, FG, True, c, 1)
        # On affiche le carré et la flèche de retour au centre
        pygame.draw.rect(self.ecran, FG, (40, 520, 70, 70), 1)
        self.ecran.blit(fleche_retour, (50, 530))
Exemplo n.º 2
0
 def mettre_a_jour_monde(self):
     """ Met à jour les informations mondiales
     ---
     """
     # On change la barre d'information
     creer_masque(0, 1550, 400, 120, BG, self.ecran)
     afficher_texte(self.ecran, "Monde", (1600, 30), 60, 300, 80)
     self.mettre_a_jour_information_monde()
     # On change le titre du grahique
     creer_masque(650, self.GAUCHE - 5, self.LARGEUR, 30, BG, self.ecran)
     centrer_texte(self.ecran, self.police, f"Evolution mondiale", FG,
                   self.LARGEUR, 30, 650, self.GAUCHE - 5)
Exemplo n.º 3
0
 def effacer_graphique(self):
     """ On "efface" le graphique
     ---
     """
     creer_masque(self.DIST_HAUT + self.MARGE, self.GAUCHE + self.MARGE + 2,
                  self.LARGEUR - 2 * self.MARGE,
                  self.HAUTEUR - 2 * self.MARGE, BG, self.ecran)
     creer_masque(self.DIST_HAUT + self.HAUTEUR - self.MARGE + 2,
                  self.GAUCHE + self.MARGE - 70,
                  self.LARGEUR - self.MARGE + 90, self.MARGE, BG,
                  self.ecran)
     creer_masque(self.DIST_HAUT + 10, self.GAUCHE - 80, 112,
                  self.HAUTEUR - self.MARGE, BG, self.ecran)
Exemplo n.º 4
0
    def valeur_sur_graphique(self):
        """ Affiche les valeurs du graphique à la position de la souris
        ---
        résultat :

            - int, int
        """
        # Si un masque doit être créé pour réécrire les valeur au point de la souris
        if self.mettre_masque:
            creer_masque(600, 10, 200, 70, BG, self.ecran)
            self.mettre_masque = False

        # la position de la souris sur l'écran
        x, y = pygame.mouse.get_pos()
        if self.sur_pays:
            # Si la souris est sur le graphique pays
            if dans_rect(self.BORD_GRAPHIQUE, x, y) and len(
                    self.param_dict_monde):
                # On convertit l'abcsisse en un entier qui sera le numéro associé à la date
                numero_date = int(
                    (x - self.BORD_GRAPHIQUE[0]) * self.COEF_LARGEUR *
                    len(self.param_dict_monde[self.clees[0]]))
                # Si le numéro est plus grand que les dates existantes
                if numero_date >= len(self.models[self.num_model].date):
                    numero_date = -1
                # On affiche la date
                centrer_texte(
                    self.ecran, self.police_donnee,
                    f"Date : {self.models[self.num_model].date[numero_date]}",
                    FG, 150, 50, 600, 15)
                # On affiche la valeur
                centrer_texte(
                    self.ecran, self.police_donnee, "Valeur : {:.2e}".format(
                        int((self.BORD_GRAPHIQUE[1] - y) * self.COEF_HAUTEUR *
                            max([
                                max(self.param_dict[self.num_model][x])
                                for x in self.param_dict[self.num_model]
                            ]))), FG, 150, 50, 630, 15)
                self.mettre_masque = True
        else:
            # Si la souris est sur le graphique mondial
            if dans_rect(self.BORD_GRAPHIQUE, x, y) and len(
                    self.param_dict_monde):
                # On convertit l'abcsisse en un entier qui sera le numéro associé à la date
                numero_date = int(
                    (x - self.BORD_GRAPHIQUE[0]) * self.COEF_LARGEUR *
                    len(self.param_dict_monde[self.clees[0]]))
                # Si le numéro est plus grand que les dates existantes
                if numero_date >= len(self.liste_date):
                    numero_date = -1
                # On affiche la date
                centrer_texte(self.ecran, self.police_donnee,
                              f"Date : {self.liste_date[numero_date]}", FG,
                              150, 50, 600, 15)
                # On affiche la valeur
                centrer_texte(
                    self.ecran, self.police_donnee, "Valeur : {:.2e}".format(
                        int((self.BORD_GRAPHIQUE[1] - y) * self.COEF_HAUTEUR *
                            max([
                                max(self.param_dict_monde[x])
                                for x in self.clees
                            ]))), FG, 150, 50, 630, 15)
                self.mettre_masque = True
        return x, y
Exemplo n.º 5
0
    def changer_pays(self, numero_pays):
        """ Change le graphique du pays donnés
        ---
        paramètres :

            - numero_pays (int) le numéro du pays donné
        """
        # Si le pays est dans la base de données
        if numero_pays < len(self.liste_tag):
            # On récupère le tag et le pays correspondant
            tag = self.liste_tag[numero_pays]
            a = [
                n for n in range(len(self.models))
                if self.models[n].pays.tag == tag
            ]
            # L'affichage doit désormais afficher les données de ce pays
            self.pays_selectione = numero_pays
            # Si le pays a été trouvé
            if len(a) > 0:
                self.num_model = a[0]
                # On met à jour l'intitulé du graphique
                creer_masque(650, self.GAUCHE - 5, self.LARGEUR, 30, BG,
                             self.ecran)
                centrer_texte(
                    self.ecran, self.police,
                    f"Evolution locale ({self.models[self.num_model].pays.nom})",
                    FG, self.LARGEUR, 30, 650, self.GAUCHE - 5)
                # On met à jour la barre d'informations
                self.mettre_a_jour_information_pays()
                # Si on a au moins deux points, on peut afficher les données
                if len(self.param_dict[self.num_model][self.clees[0]]) >= 2:
                    self.afficher_pays()
                # On "efface" la barre d'information
                creer_masque(self.DIST_HAUT + 10, self.GAUCHE - 80, 100,
                             self.HAUTEUR - self.MARGE, BG, self.ecran)
                creer_masque(self.DIST_HAUT - 10, self.GAUCHE + 25, 5,
                             self.HAUTEUR - self.MARGE, BG, self.ecran)
                # Cherche la valeur maximale pour avoir la hauteur maximale du graphique
                mx = max([
                    max(self.param_dict[self.num_model][x])
                    for x in self.param_dict[self.num_model]
                ])
                # On affiche les traits sur le graphique et on ajoute le nombre à côté
                if mx > 0:
                    x_coord = echelloner_valeur(0, mx, 10)
                    dx = self.H / mx
                    for x in x_coord:
                        form = "{:.2e}".format(int(x))
                        w = self.police_donnee.size(form)[0]
                        Y = self.HAUT - int(x * dx)
                        pygame.draw.line(
                            self.ecran, FG,
                            (self.MARGE + self.GAUCHE, Y + self.DIST_HAUT),
                            (self.MARGE - 5 + self.GAUCHE, Y + self.DIST_HAUT),
                            2)
                        self.ecran.blit(
                            self.police_donnee.render(form, True, FG),
                            ((self.MARGE - w) + self.GAUCHE - 10,
                             Y - 10 + self.DIST_HAUT))

            # Par défaut on affiche le monde
            else:
                if not self.sur_pays:
                    self.retour_monde()