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))
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)
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)
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
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()