#-*- coding:Utf-8 -*- #SUMER Okan 6TB #Travail de Fin d'Etude - Projet #© Sumer Corporation 2015 #Connexion HOST = '192.168.1.33' PORT = 46000 from tkinter import * import sqlite3 import socket, sys, threading import os from tkinter.ttk import * class Connexion(Tk): def __init__(self): Tk.__init__(self) self.configure(padx=20, pady=20) 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") os._exit(127) print("Connexion établie avec le serveur.") self.flag=0 self.logConnect="" self.connect() self.mainloop() self.agendaConn() def connect(self): Label(self, text="Connexion", font=("Helvetica", 20)).grid(row=0, column=0, columnspan=4, pady=10) #Nom de compte Label(self, text="Nom de compte:").grid(row=1, column=1, sticky=E) self.entNDC=Entry(self) self.entNDC.grid(row=1, column=2, sticky=W) #Mot de passe Label(self, text="Mot de passe:").grid(row=2, column=1, pady=3, sticky=E) self.entMDP=Entry(self, show="*") self.entMDP.grid(row=2, column=2, sticky=W) Button(self,text="Valider", command=self.login).grid(row=3, column=1, columnspan=2, pady=5) #Zone clicable afin de s'inscrire Label(self, text="Vous n'avez pad d'Agenda? Créez le vôtre").grid(row=4, column=1, columnspan=2, pady=10, sticky=E) inscr=Label(self, text="ici", font=("Helvetica",10), underline=1) inscr.grid(row=4, column=3, pady=10, sticky=W) inscr.bind("", self.register) self.bind("", self.login) #Prépare une zone de texte pour un message d'erreur self.errLogin=Label(self, text="") self.errLogin.grid(row=5, column=0, columnspan=4) #Créer un espace d'administration self.admin=Label(self, text="Administration", font=("Helvetica", 7), underline = 0) self.admin.grid(row=6, column=0, columnspan=4, sticky=W) self.admin.bind("", self.adminLog) def login(self, event=None): user="CONN" user+="#"+self.entNDC.get().upper() user+="#"+self.entMDP.get() #Envoie le nom de compte et le mdp et reçois la validation ou non de la connexion self.connexion.send(user.encode("Utf8")) rep=self.connexion.recv(1024).decode("Utf8") if rep=="ok": self.logConnect=self.entNDC.get().upper() self.flag=1 self.destroy() return else: self.errLogin.configure(text=rep, foreground='red') def adminLog(self, event=None): for children in self.winfo_children(): children.destroy() Label(self, text="Administration", font=("Helvetica", 20)).grid(row=0, column=0, columnspan=4, pady=10) Label(self, text="Nom de compte:").grid(row=1, column=1, pady=3, sticky=E) self.entNDC=Entry(self) self.entNDC.grid(row=1, column=2, sticky=W) text=StringVar() text.set("admin") self.entNDC.configure(textvariable=text) Label(self, text="Mot de passe:").grid(row=2, column=1, pady=3, sticky=E) self.entMDP=Entry(self, show="*") self.entMDP.grid(row=2, column=2, sticky=W) Button(self, text="Valider", command=self.adminLogVerif).grid(row=3, column=0, columnspan=4) Button(self, text="Retour", command=self.backToConnect).grid(row=5, column=0, columnspan=4, pady=3) self.errAdminLog=Label(self, text="", foreground="red") self.errAdminLog.grid(row=4, column=0, columnspan=4) def adminLogVerif(self): if self.entNDC.get()=="admin" and self.entMDP.get()=="ind2015": self.logConnect="admin" self.flag=1 self.destroy() return else: self.errAdminLog.configure(text="Mot de passe ou nom de compte incorrect !") def register(self, event): for children in self.winfo_children(): children.destroy() Label(self, text="Inscription", font=("Helvetica", 20)).grid(row=0, column=0, columnspan=4, pady=10) #Nom de compte Label(self, text="Nom de compte:").grid(row=1, column=1, sticky=E) self.entNDC=Entry(self) self.entNDC.grid(row=1, column=2, sticky=W) #Mot de passe Label(self, text="Mot de passe:").grid(row=2, column=1, pady=3, sticky=E) self.entMDP=Entry(self, show="*") self.entMDP.grid(row=2, column=2, sticky=W) #Confirmation du mot de passe Label(self, text="Valider le mot de passe:").grid(row=3, column=1, pady=3, sticky=E) self.entCMDP=Entry(self, show="*") self.entCMDP.grid(row=3, column=2, sticky=W) #Choix du/des thème(s) Label(self, text="Thèmes:").grid(row=4, column=1, sticky=E) self.var1=IntVar() self.t1=Checkbutton(text="Geek", variable=self.var1) self.t1.grid(row=4, column=2, sticky=W) self.var2=IntVar() self.t2=Checkbutton(text="Cinéma", variable=self.var2) self.t2.grid(row=5, column=2, sticky=W) self.var3=IntVar() self.t3=Checkbutton(text="Automobile", variable=self.var3) self.t3.grid(row=6, column=2, sticky=W) #Validation pour ensuite vérifié si les paramètres entrés sont correct Button(self, text="S'inscrire", command=self.tryRegister).grid(row=7, column=0, columnspan=4, pady=5) self.msgErr=Label(self, text="", foreground="red") self.msgErr.grid(row=8, column=0, columnspan=5) Button(self, text="Retour", command=self.backToConnect).grid(row=9, column=0, columnspan=4, pady=5) def tryRegister(self): #Mets les paramètres dans une liste pour facilité l'encodage dans la BDD user=["INSC"] user.append(self.entNDC.get().upper()) user.append(self.entMDP.get()) user.append(self.entCMDP.get()) themes=str(self.var1.get())+str(self.var2.get())+str(self.var3.get()) user.append(themes) userStr="#".join(user) #Theme sur la forme de 3 chiffres, chaque chiffre correspond à un thèmes #Si 1, thème choisi, si 0, thème non choisi. self.connexion.send(userStr.encode("Utf8")) rep=self.connexion.recv(1024).decode("Utf8") if rep=="ok": #Supprimer tout les Widgets for children in self.winfo_children(): children.destroy() self.connect() else: self.msgErr.configure(text=rep) def backToConnect(self): for children in self.winfo_children(): children.destroy() self.connect() def destroy(self): self.connexion.send("FIN".encode("Utf8")) Tk.destroy(self) def agendaConn(self): if self.flag==1: return self.logConnect