#-*- coding:Utf-8 -*- from Connexion import * import time from datetime import date class Agenda(Tk): def __init__(self, index): #Création de la fenetre Tk.__init__(self) self.configure(padx=20, pady=20) self.login=index self.connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: self.connexion.connect((HOST, PORT)) except socket.error: print("La connexion a échoué.\n") sys.exit() print("Connexion établie avec le serveur.") self.lisMois=['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Décembre'] self.lisJours=['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche'] self.tmps=time.localtime() self.currentDay=self.tmps[2] self.mois=self.tmps[1] self.annee=self.tmps[0] #Crée déjà la listBox pour le jour d'aujourd'hui self.jourSelect=str(self.currentDay)+" "+self.lisMois[self.mois-1]+" "+str(self.annee) self.dateSelect=Label(self, text=self.jourSelect) self.dateSelect.grid(row=0, column=4, sticky=S) self.agendaDuJour() self.changeMoisButton() self.grille() self.date() self.updateAgenda() def changeMoisButton(self): #Boutton permettant d'aller au mois suivant ou précédant self.buPre=Button(self, text="<", command=lambda:self.changeMois("0")) self.buPre.grid(row=0, column=1) self.buSuiv=Button(self, text=">", command=lambda:self.changeMois("1")) self.buSuiv.grid(row=0, column=3) self.affPeriode=Label(self, text=self.lisMois[self.mois-1]+" "+str(self.annee), width=20, anchor=CENTER) self.affPeriode.grid(row=0, column=2) def grille(self): #Création de la grille self.canGrille=Canvas(self, width=700, height=510) self.canGrille.grid(row=1, column=1, rowspan=3, columnspan=3, pady=20) self.canGrille.create_rectangle(1, 1, 700, 510, fill='ivory') x,y=1,31 i=0 #7 colonnes while i<6: x+=100 self.canGrille.create_line(x,0,x,510, width=2) i+=1 i=0 #6 colonnes + celle pour les jours while i<6: self.canGrille.create_line(0,y,700,y, width=2) y+=80 i+=1 #Ajout des jours x=50 for jour in self.lisJours: self.canGrille.create_text(x,15, text=jour) x+=100 def changeMois(self, index): '''Modifie le mois et l'année quand on appuie sur les buttons''' if index=="0": #Quand on appuie sur précédent self.mois-=1 #Si on arrive à au mois 0 (celui avant janvier) if self.mois==0 and self.annee-1!=self.tmps[0]-2: #On met la valeur à 12 (qui est le mois décembre) #car décembre est juste avant janvier et on diminue d'une année self.mois=12 self.annee-=1 #Si on arrive au mois de janvier de l'année avant on ne peut plus descendre if self.mois==1 and self.annee==self.tmps[0]-1: self.buPre.configure(state=DISABLED) #Remet la possibilité d'appuyer sur le bouton suivant si nous ne somme plus à la date limite if self.mois!=12 or self.annee!=self.tmps[0]+5: self.buSuiv.configure(state=NORMAL) else: #Meme système que au dessus pour suivant self.mois+=1 if self.mois==13 and self.annee+1!=self.tmps[0]+6: self.mois=1 self.annee+=1 if self.mois==12 and self.annee==self.tmps[0]+5: self.buSuiv.configure(state=DISABLED) if self.mois!=1 or self.annee!=self.tmps[0]-1: self.buPre.configure(state=NORMAL) #Met à jour l'affichage self.canGrille.destroy() self.affPeriode.configure(text=self.lisMois[self.mois-1]+" "+str(self.annee)) self.grille() self.date() def date(self): #Reprend le jour du prmeier du mois sélectionné self.indexJ=date(self.annee,self.mois,1).weekday() #Pour les mois de février if self.mois==2: if self.annee%4==0: self.calculDate(29) self.jour=29 else: self.calculDate(28) self.jour=28 else: #Pour les mois avant juillet compris (excepté février) if self.mois<=7: if self.mois%2==0: self.calculDate(30) self.jour=30 else: self.calculDate(31) self.jour=31 #Pour les mois après aout compris else: if self.mois%2==0: self.calculDate(31) self.jour=31 else: self.calculDate(30) self.jour=30 self.canGrille.bind("", self.checkDate) #Liste créé a partir d'un algoritme. Voir fichier algoList.py self.lineAndCol=['11','21','31','41','51','61','71', '12','22','32','42','52','62','72', '13','23','33','43','53','63','73', '14','24','34','44','54','64','74', '15','25','35','45','55','65','75', '16','26','36','46','56','66','76'] self.lisDone=[] i=0 while i700: x=90 y+=80 def checkDate(self, event): x=event.x y=event.y case="" #Repère la colonne dans la quel on clique if x>0 and x<100: case+="1" elif x>100 and x<200: case+="2" elif x>200 and x<300: case+="3" elif x>300 and x<400: case+="4" elif x>400 and x<500: case+="5" elif x>500 and x<600: case+="6" elif x>600 and x<700: case+="7" #Repère la ligne dans la quel on clique if y>30 and y<110: case+="1" elif y>110 and y<190: case+="2" elif y>190 and y<270: case+="3" elif y>270 and y<350: case+="4" elif y>350 and y<430: case+="5" elif y>430 and y<510: case+="6" #On attache les deux, donc colonne/ligne, ex: colonne 3, ligne 2 --> "32" if len(case)==2: index=self.lineAndCol.index(case) if self.lisDone[index]!="0": self.currentDay=self.lisDone[index] self.jourSelect=str(self.currentDay)+" "+self.lisMois[self.mois-1]+" "+str(self.annee) self.listboxEvent.destroy() self.agendaDuJour() def agendaDuJour(self): self.listboxEvent=Listbox(self, height=8, width=25) self.listboxEvent.grid(row=1, column=4, padx=15, sticky=N) self.dateSelect.configure(text=self.jourSelect) agendaRequest="AGDJ#"+self.login+"#"+str(self.currentDay)+"#"+str(self.mois)+"#"+str(self.annee) self.connexion.send(agendaRequest.encode("Utf8")) agdj=self.connexion.recv(1024).decode("Utf8") agdj=agdjs.split("#") agdj=agdjs.split(".") print(agdj) def updateAgenda(self): #créé une frame afin de regérer des boutons sur d'autres lignes que sur la fenêtre principale self.frame=Frame(self) self.frame.grid(row=3, column=4) #Bouton Ajouter self.addBu=Button(self.frame, text="Ajouter", command=self.addEvent) self.addBu.grid(row=0, column=0) def addEvent(self): self.tpl=Toplevel(self) self.tpl.configure(padx=10, pady=10) self.tpl.grab_set() self.tpl.focus_set() Label(self.tpl, text=str(self.currentDay)+" "+self.lisMois[self.mois-1]+" "+str(self.annee)).grid(row=0, column=0, columnspan=2, pady=10) Label(self.tpl, text="Titre:").grid(row=1, column=0, sticky=E, pady=5) self.entTitre=Entry(self.tpl) self.entTitre.grid(row=1, column=1, sticky=W, pady=5) Label(self.tpl, text="Type:").grid(row=2, column=0, sticky=E, pady=5) self.eventType=StringVar() self.liType=["Anniversaire", "Professionnel", "Événementiel"] self.itComboType=Combobox(self.tpl,textvariable=self.eventType,values=self.liType,state='readonly') self.itComboType.grid(row=2, column=1, sticky=W, pady=5) self.eventType.set(self.liType[0]) Label(self.tpl, text="Heure:").grid(row=3, column=0, sticky=E, pady=5) self.eventHour=StringVar() self.liHours=["Non communiquée", "Inconnue", "00:00", "01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"] #Non communiquée = Pas d'heure prédéfinie. Ex: Mon anniversaire c'est le 28 octobre #Inconnue = Je sais que j'ai un événement mais je ne suis pas au courant de l'heure. Ex: Ma fête d'anniversaire est le 28 octobre mais je n'ai pas encore programmer l'heure. self.itComboHour=Combobox(self.tpl,textvariable=self.eventHour,values=self.liHours,state='readonly') self.itComboHour.grid(row=3, column=1, sticky=W, pady=5) self.eventHour.set(self.liHours[0]) Button(self.tpl, text="Valider", command=self.addEventValide).grid(row=4, column=0, columnspan=2, pady=10) def addEventValide(self): print(str(self.currentDay)+" "+str(self.mois)+" "+str(self.annee)) if self.entTitre.get()!="" and "." not in self.entTitre.get(): #Interdire deux titres égaux + tester quand les BDD sont vides + ne pas oublier d'ajouter une reconnaissance a la personne co addStr="AJOU" addStr+=self.login+"."+str(self.currentDay)+"."+str(self.mois)+"."+str(self.annee)+"."+self.entTitre.get()+"."+self.eventType.get()+"."+self.eventHour.get() self.connexion.send(addStr.encode("Utf8")) self.tpl.destroy() else: print("nope") def destroy(self): self.connexion.send("FIN".encode("Utf8")) Tk.destroy(self) app=Connexion() index=app.agendaConn() if index: print(index) agenda=Agenda(index) agenda.mainloop()