예제 #1
0
 def __init__(self, nom, priorite, etatEffacement, consommationInitiale, consommationOptimisee, conso_max) :
     self.nom = nom
     self.numero = 0
     self.priorite = priorite
     self.etatEffacement = etatEffacement
     self.consommationOptimisee = consommationOptimisee
     self.consommationInitiale = consommationInitiale #consommation s'il n'y avait pas eu d'effacement
     self.x = (320 + 480) / 2
     self.y = (220 + 380) / 2
     self.graphe_affiche = False
     self.conso_max = conso_max
     self.jauge = Jauge(self, master, consommationInitiale, consommationOptimisee, conso_max, etatEffacement)
예제 #2
0
class AppareilAff :
    def __init__(self, nom, priorite, etatEffacement, consommationInitiale, consommationOptimisee, conso_max) :
        self.nom = nom
        self.numero = 0
        self.priorite = priorite
        self.etatEffacement = etatEffacement
        self.consommationOptimisee = consommationOptimisee
        self.consommationInitiale = consommationInitiale #consommation s'il n'y avait pas eu d'effacement
        self.x = (320 + 480) / 2
        self.y = (220 + 380) / 2
        self.graphe_affiche = False
        self.conso_max = conso_max
        self.jauge = Jauge(self, master, consommationInitiale, consommationOptimisee, conso_max, etatEffacement)

    #Fonction appelee si clic gauche
    def callback2(self, event) :
        if self.nom == 'Smart_En_Co' :
            if self.graphe_affiche :
                self.cacherAppareils()
                self.graphe_affiche = False
            else :
                self.afficherAppareils()
                self.graphe_affiche = True
        else :
            if self.jauge.affichee :
                self.jauge.cacher()
            else :
                self.jauge.afficher()

    #Fonctions d'affichage

    def afficherAppareils(self) :
        n = len(appareils)
        self.jauge.cacher()
        self.jauge.thermometre.cacher()
        for i in range(n):
            appareils[i].numero = i + 1
            appareils[i].x = (50 + 150) / (2 * np.pi / n) * np.cos(2 * np.pi * i / n) + self.x
            appareils[i].y = - (50 + 150) / (2 * np.pi / n) * np.sin(2 * np.pi * i / n) + self.y
            appareils[i].droite = master.create_line((self.x + 80 * np.cos(2 * np.pi * i / n) , self.y - 80 * np.sin(2 * np.pi * i / n)), (appareils[i].x - 50 * np.cos(2 * np.pi * i / n), appareils[i].y + 50 * np.sin(2 * np.pi * i / n)), fill = 'black', width = 5)
            appareils[i].cercle = master.create_oval((appareils[i].x - 50, appareils[i].y + 50, appareils[i].x + 50, appareils[i].y - 50), fill = change_color('ovale', value = appareils[i].consommationOptimisee, valuemin = 0, valuemax = appareils[i].conso_max), outline = change_color('line', value = appareils[i].priorite / len(appareils), valuemin = 0, valuemax = 1), width = 5, activeoutline = 'grey', tags = appareils[i].nom)
            appareils[i].titre = Frame(height = 30, width = 70)
            appareils[i].titre.place(x = appareils[i].x, y = appareils[i].y, anchor = CENTER)
            appareils[i].titre_text = Label(appareils[i].titre,text=appareils[i].nom,justify=CENTER, bg = master.itemcget(appareils[i].cercle,'fill'), font = "Verdana 10 bold").grid()
            appareils[i].jauge.afficher()
            master.tag_bind(appareils[i].nom, '<Button-1>',appareils[i].callback2)

    def cacherAppareils(self) :
        for i in range(len(appareils)) :
            master.delete(appareils[i].cercle)
            master.delete(appareils[i].droite)
            appareils[i].titre.destroy()
            if appareils[i].jauge.affichee :
                appareils[i].jauge.cacher()
        self.jauge.afficher()
        self.jauge.thermometre.afficher()

    #Mise a jour des objets

    def miseAJour(self, nature, temperature, matrice, i) :
        consotot = 0
        etat_efftot = 0
        if nature == 'algo' :
            for k in range(len(appareils)) :
                appareils[k].priorite = recupPriorite(matrice, i, appareils[k].nom)
                appareils[k].etatEffacement = recupEffacement(matrice, i , appareils[k].nom)
                appareils[k].jauge.etat_effacement = appareils[k].etatEffacement
                appareils[k].consommationOptimisee = recupPuissance(matrice, i, appareils[k].nom)
                appareils[k].jauge.puiss = appareils[k].consommationOptimisee
                consotot += appareils[k].consommationOptimisee
                etat_efftot += appareils[k].etatEffacement
            self.etatEffacement = etat_efftot / len(appareils)
            self.consommationOptimisee = consotot
        else :
            for k in range(len(appareils)) :
                appareils[k].etatEffacement = donneesFinales[k][i] / conso_max[k]
                appareils[k].jauge.etat_effacement = appareils[k].etatEffacement
                appareils[k].consommationOptimisee = donneesFinales[k][i]
                appareils[k].jauge.puiss = appareils[k].consommationOptimisee
                consotot += appareils[k].consommationOptimisee
                etat_efftot += appareils[k].etatEffacement
            self.etatEffacement = etat_efftot / len(appareils)
            self.consommationOptimisee = consotot
            self.temperature = temperature
            self.jauge.thermometre.temp = temperature

    #Mise a jour de l'affichage

    def miseAJourAff(self) :
        c1 = change_color('ovale', value = self.consommationOptimisee, valuemin = 0, valuemax = 83400)
        master.itemconfigure(self.cercle, fill = c1)
        self.titre.destroy()
        self.titre = Frame(height = 50, width = 150)
        self.titre.place(x = self.x, y = self.y, anchor = CENTER)
        self.titre_text = Label(self.titre,text=self.nom,justify=CENTER, bg = master.itemcget(self.cercle,'fill'), font = "Verdana 18 bold").grid()
        self.jauge.mettre_a_jour(self.consommationOptimisee, 0.3)
        self.jauge.thermometre.changer_temperature(self.jauge.thermometre.temp)
        if self.graphe_affiche :
            for i in range(len(appareils)) :
                c1 = change_color('ovale', value = appareils[i].consommationOptimisee, valuemin = 0, valuemax = appareils[i].conso_max)
                master.itemconfigure(appareils[i].cercle, fill = c1, outline = change_color('line', value = appareils[i].priorite / len(appareils), valuemin = 0, valuemax = 1))
                appareils[i].titre.destroy()
                appareils[i].titre = Frame(height = 50, width = 150)
                appareils[i].titre.place(x = appareils[i].x, y = appareils[i].y, anchor = CENTER)
                appareils[i].titre_text = Label(appareils[i].titre,text=appareils[i].nom,justify=CENTER, bg = master.itemcget(appareils[i].cercle,'fill'), font = "Verdana 10 bold").grid()
                appareils[i].jauge.mettre_a_jour(appareils[i].consommationOptimisee, 0.3)

    #Gestion des instructions utilisateur

    def evolutionAlgo(self, matrices) :
        global indiceAlgo
        global indiceEffTime
        if indiceAlgo < len(matrices[indiceEffTime]) :
            self.miseAJour('algo', 0, matrices[indiceEffTime], indiceAlgo)
            self.miseAJourAff()
            indiceAlgo += 1
        else :
            self.timer.destroy()
            self.timer = Frame(height = 50, width = 150)
            self.timer.place(x = 75, y = 630)
            self.titre_text = Label(self.timer, text = "fin de l'algorithme", justify=CENTER, font = "Verdana 18 bold").grid()


    def evolution10min(self, temps, temperatures, donneesFinales, tempsEffacement) :
        global indice10min
        global indiceAlgo
        self.miseAJour('10', temperatures[indice10min], [[[]]], indice10min)
        self.miseAJourAff()
        indiceAlgo = 0
        self.timer.destroy()
        self.timer = Frame(height = 50, width = 150)
        self.timer.place(x = 75, y = 630)
        self.titre_text = Label(self.timer, text = temps[indice10min].strftime('%a %d %b %Y  %H:%M'), justify=CENTER, font = "Verdana 18 bold").grid()
        indice10min += 1


    def evolutionProchainEffacement(self, temps, temperatures, matrices, tempsEffacement) :
        global indice10min
        global indiceAlgo
        global indiceEffTime
        k = 0
        for l in range(indice10min, len(temps), 6) :
            if tempsEffacement[l][1] != 0 :
                k = l
        self.miseAJour('10', temperatures[k], [[[]]], k)
        self.miseAJourAff()
        indiceAlgo = 0
        indice10min = k
        indiceEffTime += 1
        self.timer.destroy()
        self.timer = Frame(height = 50, width = 150)
        self.timer.place(x = 75, y = 630)
        self.titre_text = Label(self.timer, text = temps[indice10min-1].strftime('%a %d %b %Y  %H:%M'), justify=CENTER, font = "Verdana 18 bold").grid()


    #Initialisation du schema

    def initialisation(self) :
        c = master.create_oval((320,220,480,380),fill = change_color('ovale', value = self.consommationOptimisee, valuemin = 0, valuemax = self.conso_max), outline = 'black', width = 5, activeoutline = 'grey', tags = 'Smart_En_Co')
        self.cercle = c
        self.titre = Frame(height = 50, width = 150)
        self.titre.place(x = self.x, y = self.y, anchor = CENTER)
        self.titre_text = Label(self.titre,text=self.nom,justify=CENTER, bg = master.itemcget(self.cercle,'fill'), font = "Verdana 18 bold").grid()
        self.jauge._rectangle_fond = self.jauge.canvas.create_rectangle((self.jauge.cercle.x-50,self.jauge.cercle.y+100,self.jauge.cercle.x+45,self.jauge.cercle.y+130), fill = 'white', width =2.0)
        self.jauge._barre_etat_ini = self.jauge.canvas.create_line((self.jauge.cercle.x-50+70*self.jauge.puiss_ini/self.jauge.puiss_max,self.jauge.cercle.y+100,self.jauge.cercle.x-50+70*self.jauge.puiss_ini/self.jauge.puiss_max,self.jauge.cercle.y+130),width = 3.0,tags = self.jauge.cercle.nom+'i')
        self.jauge.puissance_actuelle = self.jauge.canvas.create_rectangle((self.jauge.cercle.x-50, self.jauge.cercle.y+100, self.jauge.cercle.x-50+70*self.jauge.puiss/self.jauge.puiss_max, self.jauge.cercle.y+130), fill = 'orange',width = 2.0,tags = self.jauge.cercle.nom+'p')
        self.jauge.indice_eff = self.jauge.canvas.create_polygon(self.jauge.cercle.x+45+7,self.jauge.cercle.y+100,self.jauge.cercle.x+45+7,self.jauge.cercle.y+130,self.jauge.cercle.x+45+7+30,self.jauge.cercle.y+115, fill = change_color('triangle', brightness = 1-self.etatEffacement), width = 2, outline = 'black',tags = self.jauge.cercle.nom+'e')
        self.jauge.thermometre = Thermometre(master, 20, 35, 500,220,530,380)
        self.jauge.thermometre.afficher()
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'e','<Enter>',self.jauge.ouvreinfobulle_e)
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'e','<Leave>',self.jauge.fermeinfobulle)
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'i', '<Enter>',self.jauge.ouvreinfobulle_i)
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'i', '<Leave>',self.jauge.fermeinfobulle)
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'p', '<Enter>',self.jauge.ouvreinfobulle_p)
        self.jauge.canvas.tag_bind(self.jauge.cercle.nom+'p', '<Leave>',self.jauge.fermeinfobulle)
        self.jauge.canvas.tag_bind('thermometre', '<Enter>',self.jauge.ouvreinfobulle_t)
        self.jauge.canvas.tag_bind('thermometre', '<Leave>',self.jauge.fermeinfobulle)
        master.tag_bind(self.nom,'<Button-2>',self.callback1)
        master.tag_bind(self.nom,'<Button-3>',self.callback1)
        master.tag_bind(self.nom,'<Button-1>',self.callback2)
        self.timer = Frame(height = 50, width = 150)
        self.timer.place(x = 75, y = 630)
        self.titre_text = Label(self.timer, text = "Vous pouvez commencer", justify=CENTER, font = "Verdana 18 bold").grid()