· 8 years ago · May 31, 2018, 08:34 PM
1from tkinter import *
2from tkinter.ttk import *
3import tkinter.ttk as ttk
4import tkinter as tk
5from tkinter.filedialog import*
6from tkinter.messagebox import *
7import serial
8import time
9from datetime import datetime
10import sqlite3
11import threading
12from threading import Thread
13from tkinter import messagebox
14
15
16# ######################################################## #
17 # PARAMETRES #
18# ######################################################## #
19
20Motdepasse = ""
21RFIDLogin = "D47C1B2B98"
22ONOFF = "1"
23New = "Yes"
24EtatCasier = "0"
25ArduinoUnoSerial = serial.Serial("com7",9600)
26delay = "3"
27
28# ######################################################## #
29 # LOGIN #
30# ######################################################## #
31
32def LoginFen():
33 if Motdepasse != "":
34 global EntryMDP,ConnexionFen
35 ConnexionFen = Tk()
36 ConnexionFen.geometry("314x120")
37 EntryMDP= StringVar()
38 ConnexionFen.title('Connexion')
39 ConnexionFen.Label1 = Label(ConnexionFen)
40 ConnexionFen.Label1.place(relx=0.38, rely=0.00, height=21, width=61)
41 ConnexionFen.Label1.configure(text='''Bienvenue''')
42 ConnexionFen.Label2 = Label(ConnexionFen)
43 ConnexionFen.Label2.place(relx=0.06, rely=0.17, height=21, width=218)
44 ConnexionFen.Label2.configure(text='''Pour continuer merci de vous connecter''')
45 ConnexionFen.Entry1 = Entry(ConnexionFen, textvariable= EntryMDP, show='â—')
46 ConnexionFen.Entry1.place(relx=0.06, rely=0.38,height=20, relwidth=0.87)
47 ConnexionFen.Entry1.configure(width=274)
48 ConnexionFen.Button1 = Button(ConnexionFen)
49 ConnexionFen.Button1.place(relx=0.19, rely=0.65, height=34, width=197)
50 ConnexionFen.Button1.configure(pady="0")
51 ConnexionFen.Button1.configure(text='''Se connecter''', command = Verification)
52 ConnexionFen.Button1.configure(width=197)
53 ConnexionFen.bind("<Return>", Verif)
54 ConnexionFen.resizable(False, False)
55 ConnexionFen.mainloop()
56 else:
57 Pass()
58
59def Pass():
60 process1 = threading.Thread(target=MainFen)
61 process1.start()
62
63def Verif(self):
64 Verification()
65
66def Verification():
67 global EntryMDP
68 if EntryMDP.get() == Motdepasse:
69 ConnexionFen.destroy()
70 Pass()
71 else:
72 showwarning('Erreur','Mot de passe incorrect')
73 EntryMDP.set('')
74
75# ######################################################## #
76 # FENETRE #
77# ######################################################## #
78
79def MainFen():
80 global NOM,PRENOM,RFIDEntry,treeview1,Fenetre,treeview2
81 Fenetre = tk.Tk()
82 Fenetre.geometry("686x363")
83 Fenetre.title("Python Arduino")
84 Fenetre.resizable(False, False)
85 Fenetre.TNotebook1 = ttk.Notebook(Fenetre)
86 Fenetre.TNotebook1.place(relx=0.0, rely=0.0, relheight=1.0, relwidth=1.0)
87 Fenetre.TNotebook1.configure(width=684)
88 Fenetre.TNotebook1.configure(takefocus="")
89 Fenetre.TNotebook1_t0 = Frame(Fenetre.TNotebook1)
90 Fenetre.TNotebook1.add(Fenetre.TNotebook1_t0, padding=3)
91 Fenetre.TNotebook1.tab(0, text="Utilisateurs", compound="left")
92 Fenetre.TNotebook1_t0.configure(width=710)
93 Fenetre.TNotebook1_t1 = Frame(Fenetre.TNotebook1)
94 Fenetre.TNotebook1.add(Fenetre.TNotebook1_t1, padding=3)
95 Fenetre.TNotebook1.tab(1, text="Logs",compound="left")
96 Fenetre.TNotebook1_t1.configure(width=680)
97 Fenetre.Labelframe1 = LabelFrame(Fenetre.TNotebook1_t0)
98 Fenetre.Labelframe1.place(relx=0.01, rely=0.03, relheight=0.46, relwidth=0.35)
99 Fenetre.Labelframe1.configure(text='''Profil''')
100 Fenetre.Labelframe1.configure(width=240)
101 Fenetre.Label1 = Label(Fenetre.Labelframe1)
102 Fenetre.Label1.place(relx=0.04, rely=0.0)
103 Fenetre.Label1.configure(text='''Nom''')
104 Fenetre.Label2 = Label(Fenetre.Labelframe1)
105 Fenetre.Label2.place(relx=0.04, rely=0.2)
106 Fenetre.Label2.configure(text='''Prenom''')
107 Fenetre.Label3 = Label(Fenetre.Labelframe1)
108 Fenetre.Label3.place(relx=0.04, rely=0.4)
109 Fenetre.Label3.configure(text='''RFID''')
110 NOM = StringVar()
111 PRENOM = StringVar()
112 RFIDEntry = StringVar()
113 Fenetre.Entry1 = Entry(Fenetre.Labelframe1,textvariable= NOM)
114 Fenetre.Entry1.place(relx=0.25, rely=0.0, relwidth=0.68)
115 Fenetre.Entry2 = Entry(Fenetre.Labelframe1,textvariable= PRENOM)
116 Fenetre.Entry2.place(relx=0.25, rely=0.2, relwidth=0.68)
117 Fenetre.Entry3 = Entry(Fenetre.Labelframe1,textvariable= RFIDEntry)
118 Fenetre.Entry3.place(relx=0.25, rely=0.4, relwidth=0.68)
119 Radio2 = IntVar()
120 Radio2.set("1")
121 Fenetre.Button2 = Button(Fenetre.Labelframe1)
122 Fenetre.Button2.place(relx=0.15, rely=0.65, height=34, width=155)
123 Fenetre.Button2.configure(text='''Sauvegarder''',command = Sauvegarder)
124 Fenetre.Labelframe2 = LabelFrame(Fenetre.TNotebook1_t0)
125 Fenetre.Labelframe2.place(relx=0.01, rely=0.5, relheight=0.34, relwidth=0.35)
126 Fenetre.Labelframe2.configure(text='''Paramètres casier''')
127 Fenetre.Label5 = Label(Fenetre.Labelframe2)
128 Fenetre.Label5.place(relx=0.04, rely=0.19)
129 Fenetre.Label5.configure(text='''Etat''')
130 Fenetre.Radiobutton3 = Radiobutton(Fenetre.Labelframe2)
131 Fenetre.Radiobutton3.place(relx=0.21, rely=0.19)
132 Fenetre.Radiobutton3.configure(text='''Activé''',variable = Radio2,value="1",command = CasierActivé)
133 Fenetre.Radiobutton4 = Radiobutton(Fenetre.Labelframe2)
134 Fenetre.Radiobutton4.place(relx=0.54, rely=0.19,)
135 Fenetre.Radiobutton4.configure(text='''Desactivé''',variable = Radio2,value="2",command = CasierDesactivé)
136 Fenetre.Button3 = Button(Fenetre.Labelframe2)
137 Fenetre.Button3.place(relx=0.04, rely=0.55, height=34, width=97)
138 Fenetre.Button3.configure(text='''Ouvrir''')
139 Fenetre.Button4 = Button(Fenetre.Labelframe2)
140 Fenetre.Button4.place(relx=0.54, rely=0.55, height=34, width=97)
141 Fenetre.Button4.configure(text='''Fermer''')
142 Fenetre.Label6 = Label(Fenetre.TNotebook1_t0)
143 Fenetre.Label6.place(relx=0.01, rely=0.885)
144 Fenetre.Label6.configure(text='''Base de données''')
145 Fenetre.Button5 = Button(Fenetre.TNotebook1_t0)
146 Fenetre.Button5.place(relx=0.16, rely=0.86, height=34, width=127)
147 Fenetre.Button5.configure(text='''Selectionner''',command = Browse)
148 Fenetre.Button1 = Button(Fenetre.TNotebook1_t0)
149 Fenetre.Button1.place(relx=0.38, rely=0.86, height=34, width=127)
150 Fenetre.Button1.configure(text='''Supprimer l'utilisateur''',command = Delete)
151 Fenetre.Button6 = Button(Fenetre.TNotebook1_t0)
152 Fenetre.Button6.place(relx=0.585, rely=0.86, height=34, width=127)
153 Fenetre.Button6.configure(text='''Charger l'utilisateur''',command = selectItem)
154 Fenetre.Button6 = Button(Fenetre.TNotebook1_t0)
155 Fenetre.Button6.place(relx=0.79, rely=0.86, height=34, width=127)
156 Fenetre.Button6.configure(text='''Modifier RFID''',command = ModifRFID)
157 Fenetre.treeview1 = Treeview(Fenetre.TNotebook1_t0)
158 Fenetre.treeview1.place(relx=0.38, rely=0.06, relheight=0.76, relwidth=0.6)
159 Fenetre.treeview1.configure(columns = ("Col1","Col2","Col3"), show='headings')
160 Fenetre.treeview1.heading("#1",text="ID")
161 Fenetre.treeview1.heading("#1",anchor="center")
162 Fenetre.treeview1.column("#1",width="50")
163 Fenetre.treeview1.column("#1",minwidth="20")
164 Fenetre.treeview1.column("#1",stretch="1")
165 Fenetre.treeview1.column("#1",anchor="w")
166 Fenetre.treeview1.heading("#2",text="Nom")
167 Fenetre.treeview1.heading("#2",anchor="center")
168 Fenetre.treeview1.column("#2",width="125")
169 Fenetre.treeview1.column("#2",minwidth="20")
170 Fenetre.treeview1.column("#2",stretch="1")
171 Fenetre.treeview1.column("#2",anchor="w")
172 Fenetre.treeview1.heading("#3",text="Prenom")
173 Fenetre.treeview1.heading("#3",anchor="center")
174 Fenetre.treeview1.column("#3",width="125")
175 Fenetre.treeview1.column("#3",minwidth="20")
176 Fenetre.treeview1.column("#3",stretch="1")
177 Fenetre.treeview1.column("#3",anchor="w")
178 Fenetre.treeview2 = Treeview(Fenetre.TNotebook1_t1)
179 Fenetre.treeview2.place(relx=0.01, rely=0.03, relheight=0.94, relwidth=0.97)
180 Fenetre.treeview2.configure(columns = ("column0","column1","column2","column3","column4"), show='headings')
181 Fenetre.treeview2.heading("#1",text="ID")
182 Fenetre.treeview2.heading("#1",anchor="center")
183 Fenetre.treeview2.column("#1",width="50")
184 Fenetre.treeview2.column("#1",minwidth="20")
185 Fenetre.treeview2.column("#1",stretch="1")
186 Fenetre.treeview2.column("#1",anchor="w")
187 Fenetre.treeview2.heading("#2",text="Nom")
188 Fenetre.treeview2.heading("#2",anchor="center")
189 Fenetre.treeview2.column("#2",width="160")
190 Fenetre.treeview2.column("#2",minwidth="20")
191 Fenetre.treeview2.column("#2",stretch="1")
192 Fenetre.treeview2.column("#2",anchor="w")
193 Fenetre.treeview2.heading("#3",text="Prenom")
194 Fenetre.treeview2.heading("#3",anchor="center")
195 Fenetre.treeview2.column("#3",width="160")
196 Fenetre.treeview2.column("#3",minwidth="20")
197 Fenetre.treeview2.column("#3",stretch="1")
198 Fenetre.treeview2.column("#3",anchor="w")
199 Fenetre.treeview2.heading("#4",text="Heure")
200 Fenetre.treeview2.heading("#4",anchor="center")
201 Fenetre.treeview2.column("#4",width="160")
202 Fenetre.treeview2.column("#4",minwidth="20")
203 Fenetre.treeview2.column("#4",stretch="1")
204 Fenetre.treeview2.column("#4",anchor="w")
205 Fenetre.treeview2.heading("#5",text="RFID")
206 Fenetre.treeview2.heading("#5",anchor="center")
207 Fenetre.treeview2.column("#5",width="115")
208 Fenetre.treeview2.column("#5",minwidth="20")
209 Fenetre.treeview2.column("#5",stretch="1")
210 Fenetre.treeview2.column("#5",anchor="w")
211 showwarning('Message','Commencez par selectionner une base de données')
212 Fenetre.mainloop()
213
214# ######################################################## #
215 # LOGIN #
216# ######################################################## #
217
218 # ################ #
219 # Edit User #
220 # ################ #
221
222def ItemData():
223 global TreeData
224 curItem = Fenetre.treeview1.focus()
225 TreeData = Fenetre.treeview1.item(curItem)
226 TreeData = str(TreeData)
227 TreeData = TreeData.replace("'",'').replace(" ",'').replace("}",'').replace("{",'').replace("[",'').replace("]",'').replace(":",'').replace("image",'').replace("values",'').replace("open0",'').replace("tags",'').replace("text",'').replace(",,",'').replace(",",' ')
228 TreeData = TreeData.split()
229
230def selectItem():
231 global New,RFIDEntry , NOM ,PRENOM,ID
232 ItemData()
233 RFIDEntry.set('')
234 NOM.set('')
235 PRENOM.set('')
236 RFIDEntry.set(TreeData[3])
237 NOM.set(TreeData[1])
238 PRENOM.set(TreeData[2])
239 ID = TreeData[0]
240 New = "No"
241
242def Delete() :
243 global RFIDEntry, PRENOM, NOM,New
244 ItemData()
245 conn = sqlite3.connect(adresse)
246 cur = conn.cursor()
247 cur.execute('DELETE FROM utilisateurs WHERE id = (?)', (TreeData[0],))
248 conn.commit()
249 conn.close()
250 RFIDEntry.set('')
251 NOM.set('')
252 PRENOM.set('')
253 New = "Yes"
254 LoadTree()
255
256def Sauvegarder():
257 global RFIDEntry, PRENOM, NOM, New,ID
258 Nom = NOM.get()
259 Prenom = PRENOM.get()
260 RFID = RFIDEntry.get()
261 if New == "Yes":
262 conn = sqlite3.connect(adresse)
263 cur = conn.cursor()
264 cur.execute('''INSERT INTO utilisateurs(Nom, Prenom, RFID)VALUES(?,?,?)''', (Nom, Prenom, RFID,))
265 conn.commit()
266 conn.close()
267 RFIDEntry.set('')
268 NOM.set('')
269 PRENOM.set('')
270 LoadTree()
271 else:
272 conn = sqlite3.connect(adresse)
273 cur = conn.cursor()
274 cur.execute("UPDATE utilisateurs SET Nom = ?, Prenom = ? , RFID = ? WHERE ID = ?", (Nom, Prenom, RFID, ID,))
275 conn.commit()
276 conn.close()
277 RFIDEntry.set('')
278 NOM.set('')
279 PRENOM.set('')
280 LoadTree()
281 showwarning('Avertissement','Modification effectué avec succés')
282 New = "Yes"
283
284 # ################ #
285 # Read RFID #
286 # ################ #
287
288def RFIDSysteme():
289 global Reader,EtatCasier,DataFinal
290 Reader = "1"
291 RFIDRead2 = ""
292 RFIDOLD = ""
293 while True:
294 if Reader == "1":
295 if ONOFF == "1":
296 while ArduinoUnoSerial.inWaiting() > 0:
297 RFIDRead2 = ArduinoUnoSerial.readline().decode('UTF-8')
298 RFIDRead2 = RFIDRead2.replace('\r\n','')
299
300 conn = sqlite3.connect(adresse)
301 cur = conn.cursor()
302 cur.execute("SELECT * FROM utilisateurs")
303 rows = cur.fetchall()
304 for row in rows:
305 if RFIDRead2 in row:
306 cur.execute("SELECT * FROM utilisateurs WHERE RFID = ?", [RFIDRead2,])
307 DataFinal = cur.fetchall()
308 DataFinal = str(DataFinal).replace(' ','').replace("'",'').replace(","," ").replace("[(","").replace(")]","").split()
309 cur = conn.cursor()
310 date = time.strftime("%d/%m/%Y %H:%M:%S")
311 cur.execute('''INSERT INTO logs(Nom, Prenom, Heure, RFID)VALUES(?,?,?,?)''', (DataFinal[1], DataFinal[2], date, RFIDRead2))
312 conn.commit()
313 NomPrenom = (DataFinal[1].upper() + " " + DataFinal[2])
314 LoadTree()
315 ArduinoUnoSerial.write(NomPrenom.encode())
316 else:
317 showwarning('Erreur','Casier désactivé')
318
319
320 # ################ #
321 # Charger les datas #
322 # ################ #
323
324def LoadTree():
325 global treeview1, treeview2
326 for item in Fenetre.treeview1.get_children():
327 Fenetre.treeview1.delete(item)
328 for item in Fenetre.treeview2.get_children():
329 Fenetre.treeview2.delete(item)
330 conn = sqlite3.connect(adresse)
331 cur = conn.cursor()
332 cur.execute("SELECT * FROM utilisateurs")
333 rows = cur.fetchall()
334 for row in rows:
335 Fenetre.treeview1.insert("", tk.END, values=row)
336 conn.close()
337 conn = sqlite3.connect(adresse)
338 cur = conn.cursor()
339 cur.execute("SELECT * FROM logs")
340 rows = cur.fetchall()
341 for row in reversed(rows):
342 Fenetre.treeview2.insert("", tk.END, values= row)
343 conn.close()
344
345 # ################ #
346 # Ouverture Auto #
347 # ################ #
348
349def ModifRFID():
350 global RFIDEntry,Reader
351 Reader = "0"
352 messagebox.showinfo("Message", "Passez votre carte puis cliquez sur OK")
353 while ArduinoUnoSerial.inWaiting() > 0:
354 RFIDRead = ArduinoUnoSerial.readline().decode('UTF-8')
355 RFIDRead = RFIDRead.replace('\r\n','')
356 RFIDEntry.set(RFIDRead)
357 Reader = "1"
358
359## # ################ #
360## # Arduino #
361## # ################ #
362##
363##def ArduOpen():
364## ArduinoUnoSerial.write('1'.encode())
365## print("Arduino : Ouvert")
366##
367##def ArduLock():
368## ArduinoUnoSerial.write('0'.encode())
369## print("Arduino : Fermé")
370##
371## # ################ #
372## # Casier #
373## # ################ #
374##
375##def Open():
376## global EtatCasier
377## if ONOFF == "1":
378## if EtatCasier =="0":
379## EtatCasier = "1"
380## ArduOpen()
381## else:
382## showwarning('Erreur','Casier déja ouvert')
383## else:
384## showwarning('Erreur','Casier désactivé')
385##
386##def Close():
387## global EtatCasier
388## if EtatCasier =="1":
389## EtatCasier = "0"
390## ArduLock()
391## else:
392## showwarning('Erreur','Casier déja fermé')
393
394 # ################ #
395 # Etat #
396 # ################ #
397
398def CasierActivé():
399 global ONOFF
400 ONOFF = "1"
401
402def CasierDesactivé():
403 global ONOFF
404 ONOFF = "0"
405
406 # ################ #
407 # Browse #
408 # ################ #
409
410def Browse():
411 global adresse,conn
412 Tk().withdraw()
413 adresse = askopenfilename(title="Ouvrir un fichier Texte",filetypes=[('db files','.db'),('all files','.*')])
414 conn = sqlite3.connect(adresse)
415 cursor = conn.cursor()
416 cursor.execute("""
417 CREATE TABLE IF NOT EXISTS logs(
418 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
419 Nom TEXT,
420 Prenom TEXT,
421 Heure TEXT,
422 RFID TEXT
423 )
424 """)
425 cursor.execute("""
426 CREATE TABLE IF NOT EXISTS utilisateurs(
427 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
428 Nom TEXT,
429 Prenom TEXT,
430 RFID TEXT
431 )
432 """)
433 conn.commit()
434 LoadTree()
435 process2 = threading.Thread(target=RFIDSysteme)
436 process2.start()
437
438LoginFen()