diff --git a/Menu/barreOutils.py b/Menu/barreOutils.py index 3239dd2..9e7e6de 100644 --- a/Menu/barreOutils.py +++ b/Menu/barreOutils.py @@ -24,11 +24,14 @@ class BarreOutils(): self.fenetre.overrideredirect(1) # Booleen fermer : devient true quand on appuie sur le bouton deconnexion self.fermer = False - self.OuvrirQT = False + # Booleen QTdemarrer : devient true quand on appuie sur le bouton demarrer de la fenetre Quicktask self.QTdemarrer = False + # Booleen barreReduite : devient true quand la barre se reduit + self.boolBarreReduite = False + # Dimension et position fenetre self.hauteur = self.fenetre.winfo_screenheight()/1.4 # 70% de la page en hauteur - self.largeur = self.fenetre.winfo_screenwidth()/13; # 10% de la page en largeur + self.largeur = self.fenetre.winfo_screenwidth()/13 # 10% de la page en largeur self.posX = self.fenetre.winfo_screenwidth() - (self.largeur - 5) # collé à droite de la page self.posY = self.fenetre.winfo_screenheight()/2 - (self.hauteur / 2) # centré en hauteur @@ -71,7 +74,7 @@ class BarreOutils(): try: image = Image.open(fleche) except Exception: - image = Image.open(flech2) + image = Image.open(fleche2) photo = ImageTk.PhotoImage(image) self.bouton_tache_rapide = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_taches_rapides) @@ -132,7 +135,7 @@ class BarreOutils(): self.bouton_deconnexion.bind("", self.QuitButton) ################################################################################################################ # si fermeture de la fenetre autrement que par le bouton deconexion - self.fenetre.protocol("WM_DELETE_WINDOW", self.IntercepteFermeture) + self.fenetre.protocol("WM_DELETE_WINDOW", self.intercepteFermetureBarre) self.fenetre.focus_set() # Quand la fenetre passe de l'état iconic à normal, elle appel la fonction iconification qui supprime ses contours @@ -140,13 +143,27 @@ class BarreOutils(): # Quand on quitte la fenetre self.fenetre.bind("", self.Leave) self.fenetre.bind("", self.Enter) - # attribut permettant de savoir si la fenetre tache rapide est deja ouverte - self.q = object + # Object qui contiendra un objet de la classe QuickTask + self.q = object + # Object qui contiendra un objet Toplevel ( une fenetre secondaire ) + self.barreReduite = Toplevel(master=self.fenetre) # on instancie la fenetre + self.barreReduite.attributes("-topmost",1, "-alpha", 0.01) + self.barreReduite.state("withdraw") + # Dimension et position fenetre + self.hauteur2 = self.fenetre.winfo_screenheight() + self.largeur2 = self.fenetre.winfo_screenwidth()/100 + self.posX2 = self.fenetre.winfo_screenwidth() - (self.largeur2 ) # collé à droite de la page + self.barreReduite.geometry("%dx%d%+d%+d" % (self.largeur2,self.hauteur2,self.posX2,0)) + self.barreReduite.state("withdraw") # et on la cache + self.barreReduite.attributes("-topmost",1, "-alpha", 0.01) # l'attribut topmost fait passer la fenetre au premier plan, l'attribut -alpha la rends transparente + # Associer l'evenement entrée de la souris dans la fenetre à la fonction EnterBarreReduite + self.barreReduite.bind("", self.EnterBarreReduite) self.fermetureQT() # instanciation de la fenetre Quicktask et réinstanciation lors de sa fermetur - self.cpt1 = 0 - self.cpt2 = 0 + # Compteurs servants à determiner quand le curseur sort de la fenetre + self.cpt1 = 0 # s'incrémente quand on sort des boutons ou de la fenetre + self.cpt2 = 0 # s'incrémente quand on sort des boutons seulement ### Fonctions liées aux Boutons ### def deconnexion(self): @@ -154,55 +171,53 @@ class BarreOutils(): self.callback() if self.fermer == True: self.fenetre.destroy() - + ### Demande de confirmation après avoir appuyer sur le bouton Deconnexion + def callback(self): + self.fermer = askyesno('Deconnexion', 'Êtes-vous sûr de vouloir vous deconnecter ?') + ### Cliquer sur le bouton taches rapides déclenche cette fonction qui ouvre la fenetre QuickTask def open_taches_rapides(self): """L'utilisateur veut ouvrir la fenetre des taches rapides""" - self.fenetre.bind("", self.LeaveQT) - if self.bouton_tache_rapide["bg"] == "green": - if self.q.fenetre.state() == "iconic": - self.q.fenetre.state("normal") - else: - self.q.fenetre.state("iconic") + if self.bouton_tache_rapide["bg"] == "green": # si le bouton taches rapides est de couleur verte ( il est de couleur verte quand on appuie sur le bouton démarrer de la fenetre Quicktask ) + if self.q.fenetre.state() == "iconic": # si la fenetre Quicktask est à l'état iconic ( fenetre réduite ) + self.q.fenetre.state("normal") # la fenetre Quicktask passe à l'état normal ( fenetre ouverte ) + else: # sinon + self.q.fenetre.state("iconic") # la fenetre Quicktask passe à l'état iconic self.fenetre.bind("", self.Leave) - else: - if self.q.fenetre.state() == "withdrawn": - self.q.fenetre.state("normal") - self.bouton_tache_rapide.configure(bg="grey") - self.bouton_tache_rapide.configure(relief = "sunken") - else: - self.q.fenetre.state("withdraw") - self.bouton_tache_rapide.configure(bg="SystemButtonFace") - self.bouton_tache_rapide.configure(relief = "raised") + else: # sinon ( si le bouton tache rapide n'est pas de couleur verte ) + if self.q.fenetre.state() == "withdrawn": # si la fenetre QuickTask est à l'état withdrawn ( cachée, invisible ) + self.q.fenetre.state("normal") # la fenetre Quicktask passe à l'état normal + self.bouton_tache_rapide.configure(bg="grey") # le bouton tache rapide passe à la couleur gris foncé + self.bouton_tache_rapide.configure(relief = "sunken") # et son aspect devient appuyé pour signifier à l'utilisateur que la fenetre tache rapide est ouverte + else: # sinon + self.q.fenetre.state("withdraw") # l'état de Quicktask devient withdraw + self.bouton_tache_rapide.configure(bg="SystemButtonFace") # le bouton tache rapide redevient de couleur et d'aspect normaux + self.bouton_tache_rapide.configure(relief = "raised") # et on associe les widget de la fenetre barreOutils à la fonction Leave qui détermine quand le curseur de la souris sort de la fenetre self.fenetre.bind("", self.Leave) - + ### Cliquer sur le bouton nouveau projet ouvre la fenetre des nouveaux projets def open_nouveau_projet(self): """L'utilisateur veut ouvrir la fenetre des nouveaux projets""" # TODO : ouvrir la fenetre des nouveaux projets - + ### Cliquer sur le bouton stats ouvre la fenetre des rapports def open_rapports(self): """L'utilisateur veut ouvrir la fenetre des rapports""" # TODO : ouvrir la fenetre des rapports - + ### cliquer sur le bouton naviguer ouvre la fenetre de navigation def naviguer(self): """L'utilisateur veut ouvrir la fenetre des rapports""" # TODO : ouvrir la fenetre de navigation self.fenetre.overrideredirect(0) self.fenetre.state('iconic') - ### convertir la chaine du paramentre de geometry( en liste de parametre entier ### + ### convertir la chaine du paramentre de geometry( en liste de parametre entier def geoliste(self, g): r=[i for i in range(0,len(g)) if not g[i].isdigit()] return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])] - ### Intercepter la fermeture d'un fenetre lorsqu'on ferme la fenetre autrement qu'avec le bouton quitter ### - def IntercepteFermeture(self): + ### Intercepter la fermeture de la fenetre barreOutil lorsqu'on la ferme autrement qu'avec le bouton quitter + def intercepteFermetureBarre(self): self.fermer = True self.fenetre.destroy() - ### Demande de confirmation après avoir appuyer sur le bouton Deconnexion - def callback(self): - self.fermer = askyesno('Deconnexion', 'Êtes-vous sûr de vouloir vous deconnecter ?') - ### Définition du chemin des images afin de pouvoir créer un executable avec pyinstaller def resource_path(self, relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ @@ -213,27 +228,30 @@ class BarreOutils(): base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) + ### Si l'état de la fenetre n'est pas iconic, on retire les bords et le cadre windows def iconification(self, event): if not self.fenetre.state() == 'iconic': self.fenetre.overrideredirect(1) - def intercepteFermeture(self): + ### Intercepte la fermeture de la fenetre Quicktask / lorsqu'on clique sur la croix de la fenetre Quicktask : + def intercepteFermetureQT(self): self.q.fermer = True - self.q.fenetre.destroy() - print("quicktask.fermer= ",self.q.fermer) - self.bouton_tache_rapide.configure(bg="SystemButtonFace") - self.bouton_tache_rapide.configure(relief = "raised") - self.fermetureQT() + self.q.fenetre.destroy() # on ferme la fenetre + #print("quicktask.fermer= ",self.q.fermer) + self.bouton_tache_rapide.configure(bg="SystemButtonFace") # le bouton tache rapide redevient de couleur normal + self.bouton_tache_rapide.configure(relief = "raised") # et de relief normal + self.fermetureQT() # on appel la fonction fermetureQT + ### Lors de la fermture de la fenetre QT : def fermetureQT(self): - self.q = QT(mother=self.fenetre) - self.q.fenetre.withdraw() - self.q.fenetre.bind("", self.reduce) - self.q.fenetre.protocol("WM_DELETE_WINDOW", self.intercepteFermeture) - self.q.start_stop.bind('', self.QT_start) + self.q = QT(mother=self.fenetre) # On renouvelle l'objet de la classe Quicktask qui ouvre une fenetre Quicktask + self.q.fenetre.withdraw() # On cache la fentre + self.q.fenetre.bind("", self.reduce) # On associe le fait de changer l'état de la fentre ( iconic) à la fonciton reduce + self.q.fenetre.protocol("WM_DELETE_WINDOW", self.intercepteFermetureQT) # On associe intercepte la fermeture de la fenetre Quicktask + self.q.start_stop.bind('', self.QT_start) # On associe le fait de presser le bouton démarrer à la fonction QT_start self.q.QTdemarrer = False - self.q.cancel.bind('', self.QT_cancel) - self.fenetre.bind("", self.Leave) - + self.q.cancel.bind('', self.QT_cancel) # On associe le fait de presser le bouton annuler à la fonction QT_cancel + self.fenetre.bind("", self.Leave) # On associe le fait de sortir avec le curseur de la souris de la fenetre à la fonction Leave + ### Lors de l'appuie sur le bouton demarrer de la fenetre Quicktask def QT_start(self,args): if self.q.QTdemarrer == False: self.bouton_tache_rapide.configure(bg="green") @@ -241,42 +259,59 @@ class BarreOutils(): else: self.bouton_tache_rapide.configure(bg="grey") self.bouton_tache_rapide.configure(relief = "sunken") + ### Lors de l'appuie sur le bouton annuler de la fenetre Quicktask def QT_cancel(self,args): self.q.QTdemarrer = False self.bouton_tache_rapide.configure(bg="grey") self.bouton_tache_rapide.configure(relief = "sunken") + ### Lorsque le curseur de la souris sors de la fenetre def Leave(self,args): print(" leave") + if self.q.fenetre.state() == "normal": + self.cpt1 -= 1 self.cpt1 += 1 - time.sleep(0.2) print("cpt1 = ", self.cpt1) print("cpt2 = ", self.cpt2) if self.cpt1 > self.cpt2: - self.fenetre.overrideredirect(0) - self.fenetre.state("iconic") - self.cpt1 = 0 - self.cpt2 = 0 + i = 1 + while i >= 0.02: # Disparition de la barre en dégradé + i = i - 0.01 + self.fenetre.attributes("-alpha", i) + time.sleep(0.005) + self.fenetre.attributes("-alpha", 0) + self.fenetre.overrideredirect(0) + self.fenetre.state("iconic") + self.fenetre.attributes("-alpha", 1) + if self.boolBarreReduite == False: + self.barreReduite.state("normal") + self.cpt1 = 0 + self.cpt2 = 0 + self.boolBarreReduite = True + + ### lorsque le curseur de la souris rentre dans la fenetre def Enter(self, args): self.fenetre.overrideredirect(1) self.fenetre.state("normal") self.cpt1 = 0 self.cpt2 = 0 - + ### lorsque le curseur de la souris sors d'un bouton def leaveButton(self,args): self.cpt2 += 1 print(" leave button") - def LeaveQT(self,args): - print("ne rien faire") + ### Lorsque l'on réduit la fentre def reduce(self,args): - print("cacaaaaaaaaaaaaaaaaaaaaaaaaa") self.fenetre.bind("", self.Leave) + ### Lorsque l'on appuie sur le bouton Quit de la barre d'outils def QuitButton(self,args): self.cpt1 = -1 - - - + ### Lorsque le curseur de la souris entre dans la barre réduite + def EnterBarreReduite(self, args): + time.sleep(0.2) + self.fenetre.state("normal") + self.barreReduite.withdraw() + self.boolBarreReduite = False @@ -284,3 +319,4 @@ class BarreOutils(): #b.fenetre.mainloop() +