diff --git a/Menu/barreOutils.py b/Menu/barreOutils.py index 554be33..45a9542 100644 --- a/Menu/barreOutils.py +++ b/Menu/barreOutils.py @@ -1,31 +1,36 @@ # -*- coding: utf-8 -*- import sys import os +import time from tkinter import * from tkinter.messagebox import * from PIL import Image, ImageTk DOSSIER_COURRANT = os.path.dirname(os.path.abspath(__file__)) DOSSIER_PARENT = os.path.dirname(DOSSIER_COURRANT) sys.path.append(DOSSIER_PARENT) -from Views.quickTask import QuickTask +from Views.quickTask import QuickTask as QT class BarreOutils(): """Notre fenêtre principale. Tous les widgets sont stockés comme attributs de cette fenêtre.""" - + def __init__(self): + self.mere = "rien" # céation de la fenetre self.fenetre = Tk() - + # Cacher la barre de menu + self.fenetre.overrideredirect(1) # Booleen fermer : devient true quand on appuie sur le bouton deconnexion self.fermer = False + self.OuvrirQT = False + self.QTdemarrer = False # Dimension et position fenetre - self.hauteur = self.fenetre.winfo_screenheight()/1.2 # 80% de la page en hauteur - self.largeur = self.fenetre.winfo_screenwidth()/10; # 10% de la page en largeur + 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.posX = self.fenetre.winfo_screenwidth() - (self.largeur) # collé à droite de la page + 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 # empecher le redimensionnement de la fenetre self.fenetre.resizable(width=False, height=False) @@ -40,109 +45,165 @@ class BarreOutils(): self.largeurBoutons = self.largeur - self.largeur * 0.08 self.hauteurBoutons = self.hauteur / 5 - self.hauteur * 0.01 - # Liste des projets - #liste_projets = Listbox(self.fenetre) - #liste_projets.grid(row=2,column=1) - - #liste_projets.insert(END, "gestt") - #liste_projets.insert(END, "ratatouille") - #liste_projets.insert(END, "chouxfleur") - # Chemin Images # Chemin des images pour créer executable - deco = self.resource_path("deco.jpg") - fleche = self.resource_path("fleche.png") - graphe = self.resource_path("graphe.png") - loupe = self.resource_path("loupe.jpg") - plus = self.resource_path("plus4.png") + deco = self.resource_path("Images\\quit.png") + fleche = self.resource_path("Images\\quicktask.png") + graphe = self.resource_path("Images\\stats.png") + loupe = self.resource_path("Images\\browse.png") + plus = self.resource_path("Images\\add.png") # Chemin en phase de test - deco2 = "Menu\\deco.jpg" - fleche2 = "Menu\\fleche.png" - graphe2 = "Menu\\graphe.png" - loupe2 = "Menu\\loupe.jpg" - plus2 = "Menu\\plus4.png" + deco2 = "quit.png" + fleche2 = "quicktask.png" + graphe2 = "stats.png" + loupe2 = "browse.png" + plus2 = "add.png" + + # Chemin en phase de test + deco3 = "..\\Images\\quit.png" + fleche3 = "..\\Images\\quicktask.png" + graphe3 = "..\\Images\\stats.png" + loupe3 = "..\\Images\\browse.png" + plus3 = "..\\Images\\add.png" ################################################################################################################ try: - image = Image.open("./Images/quicktask.png") + image = Image.open(fleche) except Exception: - image = Image.open(fleche2) - + image = Image.open(flech2) + photo = ImageTk.PhotoImage(image) self.bouton_tache_rapide = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_taches_rapides) self.bouton_tache_rapide.grid(row=3,column=1, padx = self.largeur * 0.02) self.bouton_tache_rapide.image = photo + self.bouton_tache_rapide.bind("", self.leaveButton) ################################################################################################################ # Bouton Nouveau Projet try: - image = Image.open("./Images/add.png") + image = Image.open(plus) except Exception: image = Image.open(plus2) + + photo = ImageTk.PhotoImage(image) - self.bouton_deconnexion = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_nouveau_projet) - self.bouton_deconnexion.grid(row=4,column=1) - self.bouton_deconnexion.image = photo + self.bouton_add = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_nouveau_projet) + self.bouton_add.grid(row=4,column=1) + self.bouton_add.image = photo + self.bouton_add.bind("", self.leaveButton) ################################################################################################################ # Bouton Rapports try: - image = Image.open("./Images/stats.png") + image = Image.open(graphe) except Exception: image = Image.open(graphe2) + + photo = ImageTk.PhotoImage(image) - self.bouton_deconnexion = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_rapports) - self.bouton_deconnexion.grid(row=5,column=1) - self.bouton_deconnexion.image = photo + self.bouton_stats = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.open_rapports) + self.bouton_stats.grid(row=5,column=1) + self.bouton_stats.image = photo + self.bouton_stats.bind("", self.leaveButton) ################################################################################################################ # Bouton Naviguer try: - image = Image.open("./Images/browse.png") + image = Image.open(loupe) except Exception: image = Image.open(loupe2) + photo = ImageTk.PhotoImage(image) self.bouton_naviguer = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.naviguer) self.bouton_naviguer.grid(row=6,column=1) self.bouton_naviguer.image = photo + self.bouton_naviguer.bind("", self.leaveButton) ################################################################################################################ # Bouton Deconnexion try: - image = Image.open("./Images/quit.png") + image = Image.open(deco) except Exception: image = Image.open(deco2) + + photo = ImageTk.PhotoImage(image) self.bouton_deconnexion = Button(self.fenetre, image=photo,width=self.largeurBoutons,height=self.hauteurBoutons, command=self.deconnexion) self.bouton_deconnexion.grid(row=7,column=1) self.bouton_deconnexion.image = photo + self.bouton_deconnexion.bind("", self.leaveButton) + 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.focus_set() + # Quand la fenetre passe de l'état iconic à normal, elle appel la fonction iconification qui supprime ses contours + self.fenetre.bind("", self.iconification) + # 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 + + self.fermetureQT() # instanciation de la fenetre Quicktask et réinstanciation lors de sa fermetur + + self.cpt1 = 0 + self.cpt2 = 0 + + ### Fonctions liées aux Boutons ### def deconnexion(self): """L'utilisateur veut fermer le programme et se deconnecter""" self.callback() if self.fermer == True: self.fenetre.destroy() + def open_taches_rapides(self): """L'utilisateur veut ouvrir la fenetre des taches rapides""" - QuickTask(mother=self.fenetre) - # TODO : 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") + 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") + self.fenetre.bind("", self.Leave) + def open_nouveau_projet(self): """L'utilisateur veut ouvrir la fenetre des nouveaux projets""" # TODO : ouvrir la fenetre des nouveaux projets + def open_rapports(self): """L'utilisateur veut ouvrir la fenetre des rapports""" # TODO : ouvrir la fenetre des rapports + 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 ### 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): + 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 ?') - #showinfo('Titre 3', 'Vous avez peur!') - #showerror("Titre 4", "Aha") + ### 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 """ try: @@ -152,10 +213,74 @@ class BarreOutils(): base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) + def iconification(self, event): + if not self.fenetre.state() == 'iconic': + self.fenetre.overrideredirect(1) + def intercepteFermeture(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() + 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.QTdemarrer = False + self.q.cancel.bind('', self.QT_cancel) + self.fenetre.bind("", self.Leave) + + + def QT_start(self,args): + if self.q.QTdemarrer == False: + self.bouton_tache_rapide.configure(bg="green") + self.q.QTdemarrer = True + else: + self.bouton_tache_rapide.configure(bg="grey") + self.bouton_tache_rapide.configure(relief = "sunken") + def QT_cancel(self,args): + self.q.QTdemarrer = False + self.bouton_tache_rapide.configure(bg="grey") + self.bouton_tache_rapide.configure(relief = "sunken") + def Leave(self,args): + print(" leave") + 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 + def Enter(self, args): + self.fenetre.overrideredirect(1) + self.fenetre.state("normal") + self.cpt1 = 0 + self.cpt2 = 0 + + def leaveButton(self,args): + self.cpt2 += 1 + print(" leave button") + def LeaveQT(self,args): + print("ne rien faire") - + def reduce(self,args): + print("cacaaaaaaaaaaaaaaaaaaaaaaaaa") + self.fenetre.bind("", self.Leave) + def QuitButton(self,args): + self.cpt1 = -1 + + + + + + #b = BarreOutils() -#print(b.fenetre.geometry()) -#print(b.largeurBoutons) -#print(b.hauteurBoutons) #b.fenetre.mainloop() + +