· 8 years ago · May 27, 2018, 09:08 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("com4",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''',command = Open)
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''',command = Close)
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 while ArduinoUnoSerial.inWaiting() > 0:
296 RFIDRead2 = ArduinoUnoSerial.readline().decode('UTF-8')
297 RFIDRead2 = RFIDRead2.replace('\r\n','')
298 if RFIDOLD != RFIDRead2:
299 if RFIDRead2 != "":
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 LoadTree()
314 RFIDOLD = RFIDRead2
315 Open()
316 EtatCasier = "0"
317
318
319 # ################ #
320 # Charger les datas #
321 # ################ #
322
323def LoadTree():
324 global treeview1, treeview2
325 for item in Fenetre.treeview1.get_children():
326 Fenetre.treeview1.delete(item)
327 for item in Fenetre.treeview2.get_children():
328 Fenetre.treeview2.delete(item)
329 conn = sqlite3.connect(adresse)
330 cur = conn.cursor()
331 cur.execute("SELECT * FROM utilisateurs")
332 rows = cur.fetchall()
333 for row in rows:
334 Fenetre.treeview1.insert("", tk.END, values=row)
335 conn.close()
336 conn = sqlite3.connect(adresse)
337 cur = conn.cursor()
338 cur.execute("SELECT * FROM logs")
339 rows = cur.fetchall()
340 for row in reversed(rows):
341 Fenetre.treeview2.insert("", tk.END, values= row)
342 conn.close()
343
344 # ################ #
345 # Ouverture Auto #
346 # ################ #
347
348def ModifRFID():
349 global RFIDEntry,Reader
350 Reader = "0"
351 messagebox.showinfo("Message", "Passez votre carte puis cliquez sur OK")
352 while ArduinoUnoSerial.inWaiting() > 0:
353 RFIDRead = ArduinoUnoSerial.readline().decode('UTF-8')
354 RFIDRead = RFIDRead.replace('\r\n','')
355 RFIDEntry.set(RFIDRead)
356 Reader = "1"
357
358 # ################ #
359 # Arduino #
360 # ################ #
361
362def ArduOpen():
363 ArduinoUnoSerial.write('1'.encode())
364 print("Arduino : Ouvert")
365
366def ArduLock():
367 ArduinoUnoSerial.write('0'.encode())
368 print("Arduino : Fermé")
369
370 # ################ #
371 # Casier #
372 # ################ #
373
374def Open():
375 global EtatCasier
376 if ONOFF == "1":
377 if EtatCasier =="0":
378 EtatCasier = "1"
379 ArduOpen()
380 else:
381 showwarning('Erreur','Casier déja ouvert')
382 else:
383 showwarning('Erreur','Casier désactivé')
384
385def Close():
386 global EtatCasier
387 if EtatCasier =="1":
388 EtatCasier = "0"
389 ArduLock()
390 else:
391 showwarning('Erreur','Casier déja fermé')
392
393 # ################ #
394 # Etat #
395 # ################ #
396
397def CasierActivé():
398 global ONOFF
399 ONOFF = "1"
400
401def CasierDesactivé():
402 global ONOFF
403 ONOFF = "0"
404
405 # ################ #
406 # Browse #
407 # ################ #
408
409def Browse():
410 global adresse,conn
411 Tk().withdraw()
412 adresse = askopenfilename(title="Ouvrir un fichier Texte",filetypes=[('db files','.db'),('all files','.*')])
413 conn = sqlite3.connect(adresse)
414 cursor = conn.cursor()
415 cursor.execute("""
416 CREATE TABLE IF NOT EXISTS logs(
417 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
418 Nom TEXT,
419 Prenom TEXT,
420 Heure TEXT,
421 RFID TEXT
422 )
423 """)
424 cursor.execute("""
425 CREATE TABLE IF NOT EXISTS utilisateurs(
426 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
427 Nom TEXT,
428 Prenom TEXT,
429 RFID TEXT
430 )
431 """)
432 conn.commit()
433 LoadTree()
434 process2 = threading.Thread(target=RFIDSysteme)
435 process2.start()
436
437LoginFen()