├── Attachments.py
├── Bar Chart.py
├── CREATE TABLE.py
├── CRUD Example (Complete) (With Scrollbar And Function).py
├── CRUD Example (Complete).py
├── CRUD Example (NO SQL).py
├── Caesar Cipher & Statistical Analysis.pptx
├── Caesar Cipher.py
├── Calendar
├── Calendar.py
└── Control.py
├── CalendarV2
├── Calendar.py
├── CalendarView.py
├── SwimSchool.py
└── swimmerIcon.png
├── Data Mining.pptx
├── Data Mining.py
├── DataValidation
└── DataValidation.py
├── DatabaseGraphs
└── GraphsDB.py
├── Edit Interface.py
├── Email with Python.py
├── Encrypt Vid (AFTER CODE).py
├── Encryption (BEFORE CODE).py
├── Excel
├── reader.py
└── writer.py
├── Face Recognition
└── facereco.py
├── FlaskUpload
├── Main.py
├── SimpleInterface.py
├── app.py
└── templates
│ └── upload.html
├── Frames
└── Simple GUI Menu.py
├── Image Button
├── Image Button Code.py
├── Keys.txt
└── Login-Icon.png
├── Keybinds
├── Keybinds Cheat Sheet.docx
└── Keybinds.py
├── Line Graph (With Legend).py
├── Line Graph.py
├── Networking
└── PyShark
│ └── BarChartMaker.py
├── Pie Chart.py
├── Placeholder
├── Links.txt
└── placeholder.py
├── PostcodeMap
├── Example.html
├── Map.py
├── map.py
└── uk.jpg
├── PythonMegaWidgets
├── Counter.py
└── Tooltips.py
├── QR Code.py
├── Queues.py
├── ScrolledTextWidget
└── ScrolledText Widget.py
├── Signature.py
├── Stacks and Queues.pptx
├── Stacks.py
├── StyleTreeviews
└── TreeviewStyle.py
├── Subqueries Powerpoint.pptx
├── Treeview (Code Snippet).py
├── UI presentation
├── UI Design.pptx
└── test.py
├── Word Doc - Simple Table.py
├── Word Doc -Read Doc.py
├── Word Doc-Simple Writing.py
└── database tut.py
/Attachments.py:
--------------------------------------------------------------------------------
1 | import smtplib
2 | import config
3 | from email.mime.text import MIMEText
4 | from email.mime.multipart import MIMEMultipart
5 | from email.mime.base import MIMEBase
6 | from email import encoders
7 |
8 |
9 | def sendEmail(subject, msg, recipientemail):
10 | try:
11 | server = smtplib.SMTP('smtp.gmail.com:587')
12 | server.ehlo()
13 | server.starttls()
14 | server.login(config.emailAddress, config.password)
15 | server.sendmail(config.emailAddress, recipientemail, text)
16 | server.quit()
17 | print("Email Sent")
18 | except:
19 | print("Email Not Sent")
20 |
21 |
22 | subject = "NEW DEAL AVAILABLE"
23 |
24 | msg = MIMEMultipart()
25 | msg['From'] = config.emailAddress
26 | msg['To'] = config.recipientemail
27 | msg['Subject'] = subject
28 | body = "Hello, this was sent using Python"
29 | msg.attach(MIMEText(body,'plain'))
30 |
31 | filename = "sample_image.jpg"
32 | attachment = open(filename,'rb')
33 |
34 | part = MIMEBase('application','octet-stream')
35 | part.set_payload((attachment).read())
36 | encoders.encode_base64(part)
37 | part.add_header('Content-Disposition',"attachment; filename= "+filename)
38 | msg.attach(part)
39 | text = msg.as_string()
40 |
41 | sendEmail(subject, msg, config.recipientemail)
42 |
--------------------------------------------------------------------------------
/Bar Chart.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | instruments = ["Guitar","Trumpet","Drum","Saxophone","Piano"]
3 | salesData=[630,720,405,540,405]
4 | y_pos = sorted(instruments)
5 |
6 | plt.bar(y_pos,salesData,align='center',alpha=0.5,color=['b','g','r','c','m'])
7 | plt.xticks(y_pos,instruments)
8 | plt.xlabel("Instrument Name")
9 | plt.ylabel("Amount Sold")
10 | plt.title("Happy Rhythms Music Store Sales Bar Chart")
11 | plt.savefig("Happy Rhythms Bar Chart")
12 | plt.show()
13 | plt.clf()
14 |
--------------------------------------------------------------------------------
/CREATE TABLE.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import messagebox
3 | from tkinter.font import Font
4 | from tkinter import scrolledtext
5 | from tkinter import ttk
6 | import mysql.connector
7 | import random
8 | import time
9 |
10 | # mydb definition
11 | # Connect MySQL
12 | if True:
13 | mydb = mysql.connector.connect(
14 | host="localhost",
15 | user="root",
16 | passwd="Cranmore1!",
17 | database="cafefishdb"
18 | )
19 |
20 | # Outputs Connection Object
21 | print(mydb)
22 | mycursor = mydb.cursor()
23 | # Create mysql
24 | mycursor.execute("""CREATE TABLE IF NOT EXISTS employee(employeeID int,firstname VARCHAR(255),secondname VARCHAR(255),gender BOOLEAN,jobtype VARCHAR(255),hourlywage FLOAT, dateJoined DATE)""")
25 | # import mysql.connector
26 | root = tk.Tk()
27 | root.title("Cafe Fish System")
28 | # Define Frames
29 | treeviewFrame = tk.Frame(root)
30 | createFrame = tk.Frame(root)
31 | retrieveFrame = tk.Frame(root)
32 | updateFrame = tk.Frame(root)
33 | deleteFrame = tk.Frame(root)
34 |
35 | # Define Frame List
36 | frameList = [treeviewFrame, createFrame, updateFrame, retrieveFrame, deleteFrame]
37 | # Configure all Frames
38 | for frame in frameList:
39 | frame.grid(row=0, column=0, sticky='news')
40 | frame.configure(bg='lightblue')
41 |
42 |
43 | def raiseFrame(frame):
44 | frame.tkraise()
45 |
46 |
47 | def raiseBack():
48 | # Clear Variables
49 | firstName.set("")
50 | secondName.set("")
51 | gender.set("")
52 | wage.set(0.00)
53 | job.set("Frycook")
54 | treeviewEmployeeUpdate()
55 | treeviewFrame.tkraise()
56 |
57 |
58 | def raiseCreate():
59 | job.set("Frycook")
60 | gender.set("Male")
61 | createFrame.tkraise()
62 |
63 |
64 | def raiseRetrieve():
65 | nameList = []
66 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
67 | myresults = mycursor.fetchall()
68 | for i in myresults:
69 | name = i[0] + " " + i[1]
70 | nameList.append(name)
71 | searchOM = tk.OptionMenu(retrieveFrame, searchTerm, *nameList)
72 | searchOM.grid(row=2, column=2)
73 | retrieveFrame.tkraise()
74 |
75 |
76 | def raiseUpdate():
77 | nameList = []
78 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
79 | myresults = mycursor.fetchall()
80 | for i in myresults:
81 | name = i[0] + " " + i[1]
82 | nameList.append(name)
83 | searchOM = tk.OptionMenu(updateFrame, updateTerm, *nameList)
84 | searchOM.grid(row=2, column=2)
85 | job.set("Frycook")
86 | gender.set("Male")
87 | updateFrame.tkraise()
88 |
89 |
90 | def raiseDelete():
91 | nameList = []
92 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
93 | myresults = mycursor.fetchall()
94 | for i in myresults:
95 | name = i[0] + " " + i[1]
96 | nameList.append(name)
97 | searchOM = tk.OptionMenu(deleteFrame, deleteTerm, *nameList)
98 | searchOM.grid(row=2, column=2)
99 | deleteFrame.tkraise()
100 |
101 |
102 | # SQL
103 | def create():
104 | employeeID=random.randint(1,5000)
105 | date = time.strftime('%Y-%m-%d')
106 | insertSQL = """INSERT INTO employee (employeeID,firstname,secondname,gender,jobtype,hourlywage,dateJoined) VALUES(%s,%s,%s,%s,%s,%s,%s)"""
107 | if gender.get() =="Male":
108 | mycursor.execute(insertSQL,(employeeID,firstName.get(),secondName.get(),False,job.get(),wage.get(),date))
109 | else:
110 | mycursor.execute(insertSQL,(employeeID,firstName.get(),secondName.get(),True,job.get(),wage.get(),date))
111 | mydb.commit()
112 | treeviewEmployeeUpdate()
113 | pass
114 |
115 |
116 | def retrieve():
117 | fName, sName = searchTerm.get().split(" ")
118 | selectSQL = """SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
119 | mycursor.execute(selectSQL, (fName, sName))
120 | myresult = mycursor.fetchone()
121 | print(myresult)
122 | firstName.set(myresult[0])
123 | secondName.set(myresult[1])
124 | gender.set(myresult[2])
125 | job.set(myresult[3])
126 | wage.set(myresult[4])
127 | pass
128 |
129 |
130 | def update():
131 | fName, sName = updateTerm.get().split(" ")
132 | updateSQL = """UPDATE employee SET firstname=%s,secondname=%s,gender=%s,jobtype=%s,hourlywage=%s WHERE firstname=%s AND secondname=%s"""
133 | mycursor.execute(updateSQL, (firstName.get(), secondName.get(), gender.get(), job.get(), wage.get(), fName, sName))
134 | mydb.commit()
135 | treeviewEmployeeUpdate()
136 | pass
137 |
138 |
139 | def delete():
140 | fName, sName = deleteTerm.get().split(" ")
141 | deleteSQL = """DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
142 | mycursor.execute(deleteSQL, (fName, sName))
143 | mydb.commit()
144 | treeviewEmployeeUpdate()
145 | pass
146 |
147 |
148 | def fillEntryFields(a, b, c):
149 | fName, sName = updateTerm.get().split(" ")
150 | SQL = """SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
151 | mycursor.execute(SQL, (fName, sName))
152 | myresults = mycursor.fetchone()
153 | firstName.set(myresults[0])
154 | secondName.set(myresults[1])
155 | gender.set(myresults[2])
156 | job.set(myresults[3])
157 | wage.set(myresults[4])
158 |
159 |
160 | def treeviewEmployeeUpdate():
161 | Remove = EmployView.get_children()
162 | for child in Remove:
163 | EmployView.delete(child)
164 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage,dateJoined FROM employee")
165 | myresults = mycursor.fetchall()
166 | for i in myresults:
167 | if i[2] == False:
168 | EmployView.insert("","end", text="", values=(i[0],i[1],"Male",i[3],i[4],i[5]))
169 | else:
170 | EmployView.insert("", "end", text="", values=(i[0], i[1], "Female", i[3], i[4], i[5]))
171 | pass
172 |
173 |
174 |
175 | def fireEmployee():
176 | items = EmployView.selection()
177 | print(items)
178 | employeeData = []
179 | for i in items:
180 | employeeData.append(EmployView.item(i)['values'])
181 | print(employeeData)
182 | for employee in employeeData:
183 | fireEmployeeSQL = """DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
184 | mycursor.execute(fireEmployeeSQL, (employee[0], employee[1]))
185 | print("Deleted", employee[0], employee[1])
186 | mydb.commit()
187 |
188 |
189 | # Tkinter Variable
190 | firstName = tk.StringVar()
191 | secondName = tk.StringVar()
192 | gender = tk.StringVar()
193 | wage = tk.StringVar()
194 | job = tk.StringVar()
195 |
196 | searchTerm = tk.StringVar()
197 | deleteTerm = tk.StringVar()
198 | updateTerm = tk.StringVar()
199 | updateTerm.trace('w', fillEntryFields)
200 | # Setting Default Values
201 | firstName.set("")
202 | secondName.set("")
203 | gender.set("")
204 | wage.set(0.00)
205 | job.set("Frycook")
206 | # Fonts
207 | titleFont = Font(family="Arial", size="48")
208 | labelFont = Font(family="Arial", size="24")
209 | buttonFont = Font(family="Arial", size="20")
210 |
211 | # treeview Frame Widgets Define
212 | EmployView = ttk.Treeview(treeviewFrame)
213 | EmployView['columns'] = ("firstname", "secondname", "gender", "jobtype", "hourlywage", "dateJoined")
214 | EmployView.grid(row=2, column=1, columnspan=5)
215 | EmployView.heading("#0", text="", anchor="w")
216 | EmployView.column("#0", anchor="center", width=5, stretch=tk.NO)
217 | EmployView.heading("firstname", text="First Name", anchor="w")
218 | EmployView.column("firstname", anchor="center", width=80)
219 | EmployView.heading("secondname", text="Second Name", anchor="w")
220 | EmployView.column("secondname", anchor="center", width=80)
221 | EmployView.heading("gender", text="Gender", anchor="w")
222 | EmployView.column("gender", anchor="center", width=80)
223 | EmployView.heading("jobtype", text="Job Type", anchor="w")
224 | EmployView.column("jobtype", anchor="center", width=80)
225 | EmployView.heading("hourlywage", text="Hourly Wage", anchor="w")
226 | EmployView.column("hourlywage", anchor="center", width=80)
227 | EmployView.heading("dateJoined", text="Date Joined", anchor="w")
228 | EmployView.column("dateJoined", anchor="center", width=80)
229 |
230 | EmployViewScrollbar = ttk.Scrollbar(treeviewFrame, orient="vertical", command=EmployView.yview)
231 | EmployView.configure(yscroll=EmployViewScrollbar.set)
232 | EmployViewScrollbar.grid(row=2, column=6, sticky="ns")
233 | EmployView.bind("", lambda e: fireEmployee())
234 |
235 | # Labels
236 | titleLabel = tk.Label(treeviewFrame, text="Cafe Fish Employee Table", font=titleFont, bg='blue', fg='lightblue')
237 | titleLabel.grid(row=1, column=1, columnspan=5)
238 | # Buttons
239 | createButton = tk.Button(treeviewFrame, text="Create", font=buttonFont, bg='blue', fg='lightblue', command=raiseCreate)
240 | createButton.grid(row=3, column=1)
241 | #Not implemented with new database changes, this video is primarily focused on showing CREATE TABLE IF NOT EXISTS
242 |
243 | #retrieveButton = tk.Button(treeviewFrame, text="Retrieve", font=buttonFont, bg='blue', fg='lightblue',command=raiseRetrieve)
244 | #retrieveButton.grid(row=3, column=2)
245 | #updateButton = tk.Button(treeviewFrame, text="Update", font=buttonFont, bg='blue', fg='lightblue', command=raiseUpdate)
246 | #updateButton.grid(row=3, column=3)
247 | #deleteButton = tk.Button(treeviewFrame, text="Delete", font=buttonFont, bg='blue', fg='lightblue', command=raiseDelete)
248 | #deleteButton.grid(row=3, column=4)
249 |
250 | # Create Frame Widgets
251 | # createFrame
252 | createTLabel = tk.Label(createFrame, text="Create Record In Table", font=titleFont, bg='lightblue', fg='blue')
253 | createTLabel.grid(row=1, column=1, columnspan=5)
254 | createFNameLabel = tk.Label(createFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
255 | createFNameLabel.grid(row=2, column=1)
256 | createSNameLabel = tk.Label(createFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
257 | createSNameLabel.grid(row=3, column=1)
258 | createGenderLabel = tk.Label(createFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
259 | createGenderLabel.grid(row=4, column=1)
260 | createJobTypeLabel = tk.Label(createFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
261 | createJobTypeLabel.grid(row=5, column=1)
262 | createHourlyWageLabel = tk.Label(createFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
263 | createHourlyWageLabel.grid(row=6, column=1)
264 | # Label Widgets
265 | createFNameLabel = tk.Entry(createFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
266 | createFNameLabel.grid(row=2, column=2)
267 | createSNameLabel = tk.Entry(createFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
268 | createSNameLabel.grid(row=3, column=2)
269 | createWageLabel = tk.Entry(createFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
270 | createWageLabel.grid(row=6, column=2)
271 | createGenderRBM = tk.Radiobutton(createFrame, text="Male", variable=gender, value="Male", font=labelFont,
272 | bg='lightblue', fg='blue')
273 | createGenderRBM.grid(row=4, column=2)
274 | createGenderRBF = tk.Radiobutton(createFrame, text="Female", variable=gender, value="Female", font=labelFont,
275 | bg='lightblue', fg='blue')
276 | createGenderRBF.grid(row=4, column=3)
277 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
278 | createJobTypeOM = tk.OptionMenu(createFrame, job, *jobList)
279 | createJobTypeOM.grid(row=5, column=2)
280 | # Button
281 | createcButton = tk.Button(createFrame, text="Create", command=create, font=buttonFont, bg="blue", fg="lightblue")
282 | createcButton.grid(row=7, column=2)
283 | backCButton = tk.Button(createFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
284 | backCButton.grid(row=7, column=1)
285 |
286 | # Retrieve Frame Widgets
287 | # retrieveFrame
288 | retrieveTLabel = tk.Label(retrieveFrame, text="Retrieve Record In Table", font=titleFont, bg='lightblue', fg='blue')
289 | retrieveTLabel.grid(row=1, column=1, columnspan=5)
290 | retrieveSearchLabel = tk.Label(retrieveFrame, text="Search Name: ", font=labelFont, bg='lightblue', fg='blue')
291 | retrieveSearchLabel.grid(row=2, column=1)
292 | retrieveFNameLabel = tk.Label(retrieveFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
293 | retrieveFNameLabel.grid(row=3, column=1)
294 | retrieveSNameLabel = tk.Label(retrieveFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
295 | retrieveSNameLabel.grid(row=4, column=1)
296 | retrieveGenderLabel = tk.Label(retrieveFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
297 | retrieveGenderLabel.grid(row=5, column=1)
298 | retrieveJobTypeLabel = tk.Label(retrieveFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
299 | retrieveJobTypeLabel.grid(row=6, column=1)
300 | retrieveHourlyWageLabel = tk.Label(retrieveFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
301 | retrieveHourlyWageLabel.grid(row=7, column=1)
302 | # Retrieved Data Label Widgets
303 | retrieveFNameLabelData = tk.Label(retrieveFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
304 | retrieveFNameLabelData.grid(row=3, column=2)
305 | retrieveSNameLabelData = tk.Label(retrieveFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
306 | retrieveSNameLabelData.grid(row=4, column=2)
307 | retrieveWageLabelData = tk.Label(retrieveFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
308 | retrieveWageLabelData.grid(row=7, column=2)
309 | retrieveGenderLabelData = tk.Label(retrieveFrame, textvariable=gender, font=labelFont, bg='lightblue', fg='blue')
310 | retrieveGenderLabelData.grid(row=5, column=2)
311 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
312 | retrieveJobTypeOM = tk.OptionMenu(retrieveFrame, job, *jobList)
313 | retrieveJobTypeOM.grid(row=6, column=2)
314 | # Button
315 | retrievecButton = tk.Button(retrieveFrame, text="Retrieve", command=retrieve, font=buttonFont, bg="blue",
316 | fg="lightblue")
317 | retrievecButton.grid(row=8, column=2)
318 | backCButton = tk.Button(retrieveFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
319 | backCButton.grid(row=8, column=1)
320 |
321 | # Update Frame Widgets
322 | # updateFrame
323 | updateTLabel = tk.Label(updateFrame, text="Update Record In Table", font=titleFont, bg='lightblue', fg='blue')
324 | updateTLabel.grid(row=1, column=1, columnspan=5)
325 | updateSearchNameLabel = tk.Label(updateFrame, text="Search Name: ", font=labelFont, bg='lightblue', fg='blue')
326 | updateSearchNameLabel.grid(row=2, column=1)
327 | updateFNameLabel = tk.Label(updateFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
328 | updateFNameLabel.grid(row=3, column=1)
329 | updateSNameLabel = tk.Label(updateFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
330 | updateSNameLabel.grid(row=4, column=1)
331 | updateGenderLabel = tk.Label(updateFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
332 | updateGenderLabel.grid(row=5, column=1)
333 | updateJobTypeLabel = tk.Label(updateFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
334 | updateJobTypeLabel.grid(row=6, column=1)
335 | updateHourlyWageLabel = tk.Label(updateFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
336 | updateHourlyWageLabel.grid(row=7, column=1)
337 | # Label Widgets
338 | updateFNameLabel = tk.Entry(updateFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
339 | updateFNameLabel.grid(row=3, column=2)
340 | updateSNameLabel = tk.Entry(updateFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
341 | updateSNameLabel.grid(row=4, column=2)
342 | updateWageLabel = tk.Entry(updateFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
343 | updateWageLabel.grid(row=7, column=2)
344 | updateGenderRBM = tk.Radiobutton(updateFrame, text="Male", variable=gender, value="Male", font=labelFont,
345 | bg='lightblue', fg='blue')
346 | updateGenderRBM.grid(row=5, column=2)
347 | updateGenderRBF = tk.Radiobutton(updateFrame, text="Female", variable=gender, value="Female", font=labelFont,
348 | bg='lightblue', fg='blue')
349 | updateGenderRBF.grid(row=5, column=3)
350 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
351 | updateJobTypeOM = tk.OptionMenu(updateFrame, job, *jobList)
352 | updateJobTypeOM.grid(row=6, column=2)
353 | # Button
354 | updatecButton = tk.Button(updateFrame, text="Update", command=update, font=buttonFont, bg="blue", fg="lightblue")
355 | updatecButton.grid(row=8, column=2)
356 | backUButton = tk.Button(updateFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
357 | backUButton.grid(row=8, column=1)
358 |
359 | # Delete Frame Widgets
360 | # deleteFrame
361 | # Labels
362 | updateTLabel = tk.Label(deleteFrame, text="Delete Record In Table", font=titleFont, bg='lightblue', fg='blue')
363 | updateTLabel.grid(row=1, column=1, columnspan=5)
364 | deleteLabel = tk.Label(deleteFrame, text="Delete: ", font=labelFont, bg='lightblue', fg='blue')
365 | deleteLabel.grid(row=2, column=1)
366 | deleteButton = tk.Button(deleteFrame, text="Delete", command=delete, font=buttonFont, bg="blue", fg="lightblue")
367 | deleteButton.grid(row=2, column=3)
368 | backUButton = tk.Button(deleteFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
369 | backUButton.grid(row=3, column=3)
370 |
371 | # Updates Treeview on Initial Startup
372 | treeviewEmployeeUpdate()
373 | raiseFrame(treeviewFrame)
374 | root.mainloop()
375 |
376 |
--------------------------------------------------------------------------------
/CRUD Example (Complete) (With Scrollbar And Function).py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import messagebox
3 | from tkinter.font import Font
4 | from tkinter import scrolledtext
5 | from tkinter import ttk
6 | import mysql.connector
7 | import random
8 | #mydb definition
9 | # Connect MySQL
10 | if True:
11 | mydb = mysql.connector.connect(
12 | host="localhost",
13 | user="root",
14 | passwd="password123",
15 | database="cafefishdb"
16 | )
17 |
18 | # Outputs Connection Object
19 | print(mydb)
20 | mycursor = mydb.cursor()
21 | #Create mysql
22 | mycursor.execute("""CREATE TABLE IF NOT EXISTS employee(employeeID int ,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),jobtype VARCHAR(255),hourlywage int)""")
23 | #import mysql.connector
24 | root=tk.Tk()
25 | root.title("Cafe Fish System")
26 | #Define Frames
27 | treeviewFrame=tk.Frame(root)
28 | createFrame=tk.Frame(root)
29 | retrieveFrame=tk.Frame(root)
30 | updateFrame=tk.Frame(root)
31 | deleteFrame=tk.Frame(root)
32 |
33 | #Define Frame List
34 | frameList=[treeviewFrame,createFrame,updateFrame,retrieveFrame,deleteFrame]
35 | #Configure all Frames
36 | for frame in frameList:
37 | frame.grid(row=0,column=0, sticky='news')
38 | frame.configure(bg='lightblue')
39 |
40 | def raiseFrame(frame):
41 | frame.tkraise()
42 | def raiseBack():
43 | #Clear Variables
44 | firstName.set("")
45 | secondName.set("")
46 | gender.set("")
47 | wage.set(0.00)
48 | job.set("Frycook")
49 | treeviewEmployeeUpdate()
50 | treeviewFrame.tkraise()
51 | def raiseCreate():
52 | job.set("Frycook")
53 | gender.set("Male")
54 | createFrame.tkraise()
55 | def raiseRetrieve():
56 | nameList=[]
57 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
58 | myresults=mycursor.fetchall()
59 | for i in myresults:
60 | name=i[0]+" "+i[1]
61 | nameList.append(name)
62 | searchOM = tk.OptionMenu(retrieveFrame, searchTerm, *nameList)
63 | searchOM.grid(row=2, column=2)
64 | retrieveFrame.tkraise()
65 | def raiseUpdate():
66 | nameList=[]
67 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
68 | myresults=mycursor.fetchall()
69 | for i in myresults:
70 | name=i[0]+" "+i[1]
71 | nameList.append(name)
72 | searchOM = tk.OptionMenu(updateFrame, updateTerm, *nameList)
73 | searchOM.grid(row=2, column=2)
74 | job.set("Frycook")
75 | gender.set("Male")
76 | updateFrame.tkraise()
77 | def raiseDelete():
78 | nameList=[]
79 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
80 | myresults=mycursor.fetchall()
81 | for i in myresults:
82 | name=i[0]+" "+i[1]
83 | nameList.append(name)
84 | searchOM = tk.OptionMenu(deleteFrame, deleteTerm, *nameList)
85 | searchOM.grid(row=2, column=2)
86 | deleteFrame.tkraise()
87 |
88 | #SQL
89 | def create():
90 | employeeID=random.randint(1,5000)
91 | insertSQL="""INSERT INTO employee (employeeID,firstname,secondname,gender,jobtype,hourlywage) VALUES(%s,%s,%s,%s,%s,%s)"""
92 | mycursor.execute(insertSQL,(employeeID,firstName.get(),secondName.get(),gender.get(),job.get(),wage.get()))
93 | mydb.commit()
94 | treeviewEmployeeUpdate()
95 | pass
96 | def retrieve():
97 | fName,sName=searchTerm.get().split(" ")
98 | selectSQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
99 | mycursor.execute(selectSQL,(fName,sName))
100 | myresult=mycursor.fetchone()
101 | print(myresult)
102 | firstName.set(myresult[0])
103 | secondName.set(myresult[1])
104 | gender.set(myresult[2])
105 | job.set(myresult[3])
106 | wage.set(myresult[4])
107 | pass
108 | def update():
109 | fName,sName=updateTerm.get().split(" ")
110 | updateSQL="""UPDATE employee SET firstname=%s,secondname=%s,gender=%s,jobtype=%s,hourlywage=%s WHERE firstname=%s AND secondname=%s"""
111 | mycursor.execute(updateSQL,(firstName.get(),secondName.get(),gender.get(),job.get(),wage.get(),fName,sName))
112 | mydb.commit()
113 | treeviewEmployeeUpdate()
114 | pass
115 | def delete():
116 | fName,sName=deleteTerm.get().split(" ")
117 | deleteSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
118 | mycursor.execute(deleteSQL,(fName,sName))
119 | mydb.commit()
120 | treeviewEmployeeUpdate()
121 | pass
122 |
123 | def fillEntryFields(a,b,c):
124 | fName,sName=updateTerm.get().split(" ")
125 | SQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
126 | mycursor.execute(SQL,(fName,sName))
127 | myresults=mycursor.fetchone()
128 | firstName.set(myresults[0])
129 | secondName.set(myresults[1])
130 | gender.set(myresults[2])
131 | job.set(myresults[3])
132 | wage.set(myresults[4])
133 |
134 | def treeviewEmployeeUpdate():
135 | #Delete Everything From Treeview
136 | Remove = EmployView.get_children()
137 | for child in Remove:
138 | EmployView.delete(child)
139 | #Input New Data Into Treeview Widget
140 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee")
141 | myresults=mycursor.fetchall()
142 | for i in myresults:
143 | EmployView.insert("","end",text="",values=(i[0],i[1],i[2],i[3],i[4]))
144 |
145 | def fireEmployee():
146 | items=EmployView.selection()
147 | print(items)
148 | employeeData=[]
149 | for i in items:
150 | employeeData.append(EmployView.item(i)['values'])
151 | print(employeeData)
152 | for employee in employeeData:
153 | fireEmployeeSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
154 | mycursor.execute(fireEmployeeSQL,(employee[0],employee[1]))
155 | print("Deleted",employee[0],employee[1])
156 | mydb.commit()
157 |
158 | #Tkinter Variable
159 | firstName=tk.StringVar()
160 | secondName=tk.StringVar()
161 | gender=tk.StringVar()
162 | wage=tk.StringVar()
163 | job=tk.StringVar()
164 |
165 | searchTerm=tk.StringVar()
166 | deleteTerm=tk.StringVar()
167 | updateTerm=tk.StringVar()
168 | updateTerm.trace('w',fillEntryFields)
169 | #Setting Default Values
170 | firstName.set("")
171 | secondName.set("")
172 | gender.set("")
173 | wage.set(0.00)
174 | job.set("Frycook")
175 | #Fonts
176 | titleFont = Font(family="Arial", size="48")
177 | labelFont = Font(family="Arial", size="24")
178 | buttonFont = Font(family="Arial",size = "20")
179 | #treeview Frame Widgets Define
180 | EmployView=ttk.Treeview(treeviewFrame)
181 | EmployView['columns']=("firstname","secondname","gender","jobtype","hourlywage")
182 | EmployView.grid(row=2,column=1,columnspan=5)
183 | EmployView.heading("#0",text="",anchor="w")
184 | EmployView.column("#0",anchor="center",width=5,stretch=tk.NO)
185 | EmployView.heading("firstname",text="First Name",anchor="w")
186 | EmployView.column("firstname",anchor="center",width=80)
187 | EmployView.heading("secondname",text="Second Name",anchor="w")
188 | EmployView.column("secondname",anchor="center",width=80)
189 | EmployView.heading("gender",text="Gender",anchor="w")
190 | EmployView.column("gender",anchor="center",width=80)
191 | EmployView.heading("jobtype",text="Job Type",anchor="w")
192 | EmployView.column("jobtype",anchor="center",width=80)
193 | EmployView.heading("hourlywage",text="Hourly Wage",anchor="w")
194 | EmployView.column("hourlywage",anchor="center",width=80)
195 | EmployViewScrollbar=ttk.Scrollbar(treeviewFrame,orient="vertical",command=EmployView.yview)
196 | EmployView.configure(yscroll=EmployViewScrollbar.set)
197 | EmployViewScrollbar.grid(row=2,column=6,sticky="ns")
198 | EmployView.bind("",lambda e: fireEmployee())
199 |
200 |
201 |
202 | #Labels
203 | titleLabel=tk.Label(treeviewFrame,text="Cafe Fish Employee Table",font=titleFont,bg='blue',fg='lightblue')
204 | titleLabel.grid(row=1,column=1,columnspan=5)
205 | #Buttons
206 | createButton=tk.Button(treeviewFrame,text="Create",font=buttonFont,bg='blue',fg='lightblue',command=raiseCreate)
207 | createButton.grid(row=3,column=1)
208 | retrieveButton=tk.Button(treeviewFrame,text="Retrieve",font=buttonFont,bg='blue',fg='lightblue',command=raiseRetrieve)
209 | retrieveButton.grid(row=3,column=2)
210 | updateButton=tk.Button(treeviewFrame,text="Update",font=buttonFont,bg='blue',fg='lightblue',command=raiseUpdate)
211 | updateButton.grid(row=3,column=3)
212 | deleteButton=tk.Button(treeviewFrame,text="Delete",font=buttonFont,bg='blue',fg='lightblue',command=raiseDelete)
213 | deleteButton.grid(row=3,column=4)
214 |
215 | #Create Frame Widgets
216 | #createFrame
217 | createTLabel=tk.Label(createFrame,text="Create Record In Table",font=titleFont,bg='lightblue',fg='blue')
218 | createTLabel.grid(row=1,column=1,columnspan=5)
219 | createFNameLabel=tk.Label(createFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
220 | createFNameLabel.grid(row=2,column=1)
221 | createSNameLabel=tk.Label(createFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
222 | createSNameLabel.grid(row=3,column=1)
223 | createGenderLabel=tk.Label(createFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
224 | createGenderLabel.grid(row=4,column=1)
225 | createJobTypeLabel=tk.Label(createFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
226 | createJobTypeLabel.grid(row=5,column=1)
227 | createHourlyWageLabel=tk.Label(createFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
228 | createHourlyWageLabel.grid(row=6,column=1)
229 | #Label Widgets
230 | createFNameLabel=tk.Entry(createFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
231 | createFNameLabel.grid(row=2,column=2)
232 | createSNameLabel=tk.Entry(createFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
233 | createSNameLabel.grid(row=3,column=2)
234 | createWageLabel=tk.Entry(createFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
235 | createWageLabel.grid(row=6,column=2)
236 | createGenderRBM=tk.Radiobutton(createFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
237 | createGenderRBM.grid(row=4,column=2)
238 | createGenderRBF=tk.Radiobutton(createFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
239 | createGenderRBF.grid(row=4,column=3)
240 | jobList=["Frycook","Register","Waiter","Stock Manager"]
241 | createJobTypeOM=tk.OptionMenu(createFrame,job,*jobList)
242 | createJobTypeOM.grid(row=5,column=2)
243 | #Button
244 | createcButton=tk.Button(createFrame,text="Create",command=create,font=buttonFont,bg="blue",fg="lightblue")
245 | createcButton.grid(row=7,column=2)
246 | backCButton=tk.Button(createFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
247 | backCButton.grid(row=7,column=1)
248 |
249 | #Retrieve Frame Widgets
250 | #retrieveFrame
251 | retrieveTLabel=tk.Label(retrieveFrame,text="Retrieve Record In Table",font=titleFont,bg='lightblue',fg='blue')
252 | retrieveTLabel.grid(row=1,column=1,columnspan=5)
253 | retrieveSearchLabel=tk.Label(retrieveFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
254 | retrieveSearchLabel.grid(row=2,column=1)
255 | retrieveFNameLabel=tk.Label(retrieveFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
256 | retrieveFNameLabel.grid(row=3,column=1)
257 | retrieveSNameLabel=tk.Label(retrieveFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
258 | retrieveSNameLabel.grid(row=4,column=1)
259 | retrieveGenderLabel=tk.Label(retrieveFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
260 | retrieveGenderLabel.grid(row=5,column=1)
261 | retrieveJobTypeLabel=tk.Label(retrieveFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
262 | retrieveJobTypeLabel.grid(row=6,column=1)
263 | retrieveHourlyWageLabel=tk.Label(retrieveFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
264 | retrieveHourlyWageLabel.grid(row=7,column=1)
265 | #Retrieved Data Label Widgets
266 | retrieveFNameLabelData=tk.Label(retrieveFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
267 | retrieveFNameLabelData.grid(row=3,column=2)
268 | retrieveSNameLabelData=tk.Label(retrieveFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
269 | retrieveSNameLabelData.grid(row=4,column=2)
270 | retrieveWageLabelData=tk.Label(retrieveFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
271 | retrieveWageLabelData.grid(row=7,column=2)
272 | retrieveGenderLabelData=tk.Label(retrieveFrame,textvariable=gender,font=labelFont,bg='lightblue',fg='blue')
273 | retrieveGenderLabelData.grid(row=5,column=2)
274 | jobList=["Frycook","Register","Waiter","Stock Manager"]
275 | retrieveJobTypeOM=tk.OptionMenu(retrieveFrame,job,*jobList)
276 | retrieveJobTypeOM.grid(row=6,column=2)
277 | #Button
278 | retrievecButton=tk.Button(retrieveFrame,text="Retrieve",command=retrieve,font=buttonFont,bg="blue",fg="lightblue")
279 | retrievecButton.grid(row=8,column=2)
280 | backCButton=tk.Button(retrieveFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
281 | backCButton.grid(row=8,column=1)
282 |
283 | #Update Frame Widgets
284 | #updateFrame
285 | updateTLabel=tk.Label(updateFrame,text="Update Record In Table",font=titleFont,bg='lightblue',fg='blue')
286 | updateTLabel.grid(row=1,column=1,columnspan=5)
287 | updateSearchNameLabel=tk.Label(updateFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
288 | updateSearchNameLabel.grid(row=2,column=1)
289 | updateFNameLabel=tk.Label(updateFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
290 | updateFNameLabel.grid(row=3,column=1)
291 | updateSNameLabel=tk.Label(updateFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
292 | updateSNameLabel.grid(row=4,column=1)
293 | updateGenderLabel=tk.Label(updateFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
294 | updateGenderLabel.grid(row=5,column=1)
295 | updateJobTypeLabel=tk.Label(updateFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
296 | updateJobTypeLabel.grid(row=6,column=1)
297 | updateHourlyWageLabel=tk.Label(updateFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
298 | updateHourlyWageLabel.grid(row=7,column=1)
299 | #Label Widgets
300 | updateFNameLabel=tk.Entry(updateFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
301 | updateFNameLabel.grid(row=3,column=2)
302 | updateSNameLabel=tk.Entry(updateFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
303 | updateSNameLabel.grid(row=4,column=2)
304 | updateWageLabel=tk.Entry(updateFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
305 | updateWageLabel.grid(row=7,column=2)
306 | updateGenderRBM=tk.Radiobutton(updateFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
307 | updateGenderRBM.grid(row=5,column=2)
308 | updateGenderRBF=tk.Radiobutton(updateFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
309 | updateGenderRBF.grid(row=5,column=3)
310 | jobList=["Frycook","Register","Waiter","Stock Manager"]
311 | updateJobTypeOM=tk.OptionMenu(updateFrame,job,*jobList)
312 | updateJobTypeOM.grid(row=6,column=2)
313 | #Button
314 | updatecButton=tk.Button(updateFrame,text="Update",command=update,font=buttonFont,bg="blue",fg="lightblue")
315 | updatecButton.grid(row=8,column=2)
316 | backUButton=tk.Button(updateFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
317 | backUButton.grid(row=8,column=1)
318 |
319 | #Delete Frame Widgets
320 | #deleteFrame
321 | #Labels
322 | updateTLabel=tk.Label(deleteFrame,text="Delete Record In Table",font=titleFont,bg='lightblue',fg='blue')
323 | updateTLabel.grid(row=1,column=1,columnspan=5)
324 | deleteLabel=tk.Label(deleteFrame,text="Delete: ",font=labelFont,bg='lightblue',fg='blue')
325 | deleteLabel.grid(row=2,column=1)
326 | deleteButton=tk.Button(deleteFrame,text="Delete",command=delete,font=buttonFont,bg="blue",fg="lightblue")
327 | deleteButton.grid(row=2,column=3)
328 | backUButton=tk.Button(deleteFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
329 | backUButton.grid(row=3,column=3)
330 |
331 | #Updates Treeview on Initial Startup
332 | treeviewEmployeeUpdate()
333 | raiseFrame(treeviewFrame)
334 | root.mainloop()
335 |
336 |
--------------------------------------------------------------------------------
/CRUD Example (Complete).py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import messagebox
3 | from tkinter.font import Font
4 | from tkinter import scrolledtext
5 | from tkinter import ttk
6 | import mysql.connector
7 | import random
8 | #mydb definition
9 | # Connect MySQL
10 | if True:
11 | mydb = mysql.connector.connect(
12 | host="localhost",
13 | user="root",
14 | #Define Your Password and Database Name
15 | )
16 |
17 | # Outputs Connection Object
18 | print(mydb)
19 | mycursor = mydb.cursor()
20 | #Create mysql
21 | mycursor.execute("""CREATE TABLE IF NOT EXISTS employee(employeeID int ,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),jobtype VARCHAR(255),hourlywage int)""")
22 | #import mysql.connector
23 | root=tk.Tk()
24 | root.title("Cafe Fish System")
25 | #Define Frames
26 | treeviewFrame=tk.Frame(root)
27 | createFrame=tk.Frame(root)
28 | retrieveFrame=tk.Frame(root)
29 | updateFrame=tk.Frame(root)
30 | deleteFrame=tk.Frame(root)
31 |
32 | #Define Frame List
33 | frameList=[treeviewFrame,createFrame,updateFrame,retrieveFrame,deleteFrame]
34 | #Configure all Frames
35 | for frame in frameList:
36 | frame.grid(row=0,column=0, sticky='news')
37 | frame.configure(bg='lightblue')
38 |
39 | def raiseFrame(frame):
40 | frame.tkraise()
41 | def raiseBack():
42 | #Clear Variables
43 | firstName.set("")
44 | secondName.set("")
45 | gender.set("")
46 | wage.set(0.00)
47 | job.set("Frycook")
48 | treeviewEmployeeUpdate()
49 | treeviewFrame.tkraise()
50 | def raiseCreate():
51 | job.set("Frycook")
52 | gender.set("Male")
53 | createFrame.tkraise()
54 | def raiseRetrieve():
55 | nameList=[]
56 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
57 | myresults=mycursor.fetchall()
58 | for i in myresults:
59 | name=i[0]+" "+i[1]
60 | nameList.append(name)
61 | searchOM = tk.OptionMenu(retrieveFrame, searchTerm, *nameList)
62 | searchOM.grid(row=2, column=2)
63 | retrieveFrame.tkraise()
64 | def raiseUpdate():
65 | nameList=[]
66 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
67 | myresults=mycursor.fetchall()
68 | for i in myresults:
69 | name=i[0]+" "+i[1]
70 | nameList.append(name)
71 | searchOM = tk.OptionMenu(updateFrame, updateTerm, *nameList)
72 | searchOM.grid(row=2, column=2)
73 | job.set("Frycook")
74 | gender.set("Male")
75 | updateFrame.tkraise()
76 | def raiseDelete():
77 | nameList=[]
78 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
79 | myresults=mycursor.fetchall()
80 | for i in myresults:
81 | name=i[0]+" "+i[1]
82 | nameList.append(name)
83 | searchOM = tk.OptionMenu(deleteFrame, deleteTerm, *nameList)
84 | searchOM.grid(row=2, column=2)
85 | deleteFrame.tkraise()
86 |
87 | #SQL
88 | def create():
89 | employeeID=random.randint(1,5000)
90 | insertSQL="""INSERT INTO employee (employeeID,firstname,secondname,gender,jobtype,hourlywage) VALUES(%s,%s,%s,%s,%s,%s)"""
91 | mycursor.execute(insertSQL,(employeeID,firstName.get(),secondName.get(),gender.get(),job.get(),wage.get()))
92 | mydb.commit()
93 | treeviewEmployeeUpdate()
94 | pass
95 | def retrieve():
96 | fName,sName=searchTerm.get().split(" ")
97 | selectSQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
98 | mycursor.execute(selectSQL,(fName,sName))
99 | myresult=mycursor.fetchone()
100 | print(myresult)
101 | firstName.set(myresult[0])
102 | secondName.set(myresult[1])
103 | gender.set(myresult[2])
104 | job.set(myresult[3])
105 | wage.set(myresult[4])
106 |
107 | treeviewEmployeeUpdate()
108 | pass
109 | def update():
110 | fName,sName=updateTerm.get().split(" ")
111 | updateSQL="""UPDATE employee SET firstname=%s,secondname=%s,gender=%s,jobtype=%s,hourlywage=%s WHERE firstname=%s AND secondname=%s"""
112 | mycursor.execute(updateSQL,(firstName.get(),secondName.get(),gender.get(),job.get(),wage.get(),fName,sName))
113 | mydb.commit()
114 | treeviewEmployeeUpdate()
115 | pass
116 | def delete():
117 | fName,sName=deleteTerm.get().split(" ")
118 | deleteSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
119 | mycursor.execute(deleteSQL,(fName,sName))
120 | mydb.commit()
121 | treeviewEmployeeUpdate()
122 | pass
123 |
124 | def fillEntryFields(a,b,c):
125 | fName,sName=updateTerm.get().split(" ")
126 | SQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
127 | mycursor.execute(SQL,(fName,sName))
128 | myresults=mycursor.fetchone()
129 | firstName.set(myresults[0])
130 | secondName.set(myresults[1])
131 | gender.set(myresults[2])
132 | job.set(myresults[3])
133 | wage.set(myresults[4])
134 |
135 | def treeviewEmployeeUpdate():
136 | # Deletes Everything from Treeview
137 | Remove = EmployView.get_children()
138 | for child in Remove:
139 | EmployView.delete(child)
140 | # Adds Everything back into Treeview
141 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee")
142 | myresults = mycursor.fetchall()
143 | #
144 | for i in myresults:
145 | EmployView.insert("", "end", text="", values=(i[0], i[1], i[2], i[3],i[4]))
146 |
147 |
148 | #Tkinter Variable
149 | firstName=tk.StringVar()
150 | secondName=tk.StringVar()
151 | gender=tk.StringVar()
152 | wage=tk.StringVar()
153 | job=tk.StringVar()
154 |
155 | searchTerm=tk.StringVar()
156 | deleteTerm=tk.StringVar()
157 | updateTerm=tk.StringVar()
158 | updateTerm.trace('w',fillEntryFields)
159 | #Setting Default Values
160 | firstName.set("")
161 | secondName.set("")
162 | gender.set("")
163 | wage.set(0.00)
164 | job.set("Frycook")
165 | #Fonts
166 | titleFont = Font(family="Arial", size="48")
167 | labelFont = Font(family="Arial", size="24")
168 | buttonFont = Font(family="Arial",size = "20")
169 | #treeview Frame Widgets
170 | EmployView = ttk.Treeview(treeviewFrame)
171 | EmployView["columns"] = ("firstname", "secondname","gender", "jobtype", "hourlywage")
172 | EmployView.grid(row=2, column=1, columnspan=5)
173 | EmployView.heading("#0", text="", anchor="w")
174 | EmployView.column("#0", anchor="center", width=5, stretch=tk.NO)
175 | EmployView.heading("firstname", text="First Name", anchor="w")
176 | EmployView.column("firstname", anchor="center", width=80)
177 | EmployView.heading("secondname", text="Second Name", anchor="w")
178 | EmployView.column("secondname", anchor="center", width=90)
179 | EmployView.heading("gender", text="Gender", anchor="w")
180 | EmployView.column("gender", anchor="center", width=90)
181 | EmployView.heading("jobtype", text="Job Type", anchor="w")
182 | EmployView.column("jobtype", anchor="center", width=80)
183 | EmployView.heading("hourlywage", text="Hourly Wage", anchor="w")
184 | EmployView.column("hourlywage", anchor="center", width=80)
185 |
186 | #Labels
187 | titleLabel=tk.Label(treeviewFrame,text="Cafe Fish Employee Table",font=titleFont,bg='blue',fg='lightblue')
188 | titleLabel.grid(row=1,column=1,columnspan=5)
189 | #Buttons
190 | createButton=tk.Button(treeviewFrame,text="Create",font=buttonFont,bg='blue',fg='lightblue',command=raiseCreate)
191 | createButton.grid(row=3,column=1)
192 | retrieveButton=tk.Button(treeviewFrame,text="Retrieve",font=buttonFont,bg='blue',fg='lightblue',command=raiseRetrieve)
193 | retrieveButton.grid(row=3,column=2)
194 | updateButton=tk.Button(treeviewFrame,text="Update",font=buttonFont,bg='blue',fg='lightblue',command=raiseUpdate)
195 | updateButton.grid(row=3,column=3)
196 | deleteButton=tk.Button(treeviewFrame,text="Delete",font=buttonFont,bg='blue',fg='lightblue',command=raiseDelete)
197 | deleteButton.grid(row=3,column=4)
198 |
199 | #Create Frame Widgets
200 | #createFrame
201 | createTLabel=tk.Label(createFrame,text="Create Record In Table",font=titleFont,bg='lightblue',fg='blue')
202 | createTLabel.grid(row=1,column=1,columnspan=5)
203 | createFNameLabel=tk.Label(createFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
204 | createFNameLabel.grid(row=2,column=1)
205 | createSNameLabel=tk.Label(createFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
206 | createSNameLabel.grid(row=3,column=1)
207 | createGenderLabel=tk.Label(createFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
208 | createGenderLabel.grid(row=4,column=1)
209 | createJobTypeLabel=tk.Label(createFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
210 | createJobTypeLabel.grid(row=5,column=1)
211 | createHourlyWageLabel=tk.Label(createFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
212 | createHourlyWageLabel.grid(row=6,column=1)
213 | #Label Widgets
214 | createFNameLabel=tk.Entry(createFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
215 | createFNameLabel.grid(row=2,column=2)
216 | createSNameLabel=tk.Entry(createFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
217 | createSNameLabel.grid(row=3,column=2)
218 | createWageLabel=tk.Entry(createFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
219 | createWageLabel.grid(row=6,column=2)
220 | createGenderRBM=tk.Radiobutton(createFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
221 | createGenderRBM.grid(row=4,column=2)
222 | createGenderRBF=tk.Radiobutton(createFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
223 | createGenderRBF.grid(row=4,column=3)
224 | jobList=["Frycook","Register","Waiter","Stock Manager"]
225 | createJobTypeOM=tk.OptionMenu(createFrame,job,*jobList)
226 | createJobTypeOM.grid(row=5,column=2)
227 | #Button
228 | createcButton=tk.Button(createFrame,text="Create",command=create,font=buttonFont,bg="blue",fg="lightblue")
229 | createcButton.grid(row=7,column=2)
230 | backCButton=tk.Button(createFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
231 | backCButton.grid(row=7,column=1)
232 |
233 | #Retrieve Frame Widgets
234 | #retrieveFrame
235 | retrieveTLabel=tk.Label(retrieveFrame,text="Retrieve Record In Table",font=titleFont,bg='lightblue',fg='blue')
236 | retrieveTLabel.grid(row=1,column=1,columnspan=5)
237 | retrieveSearchLabel=tk.Label(retrieveFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
238 | retrieveSearchLabel.grid(row=2,column=1)
239 | retrieveFNameLabel=tk.Label(retrieveFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
240 | retrieveFNameLabel.grid(row=3,column=1)
241 | retrieveSNameLabel=tk.Label(retrieveFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
242 | retrieveSNameLabel.grid(row=4,column=1)
243 | retrieveGenderLabel=tk.Label(retrieveFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
244 | retrieveGenderLabel.grid(row=5,column=1)
245 | retrieveJobTypeLabel=tk.Label(retrieveFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
246 | retrieveJobTypeLabel.grid(row=6,column=1)
247 | retrieveHourlyWageLabel=tk.Label(retrieveFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
248 | retrieveHourlyWageLabel.grid(row=7,column=1)
249 | #Retrieved Data Label Widgets
250 | retrieveFNameLabelData=tk.Label(retrieveFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
251 | retrieveFNameLabelData.grid(row=3,column=2)
252 | retrieveSNameLabelData=tk.Label(retrieveFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
253 | retrieveSNameLabelData.grid(row=4,column=2)
254 | retrieveWageLabelData=tk.Label(retrieveFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
255 | retrieveWageLabelData.grid(row=7,column=2)
256 | retrieveGenderLabelData=tk.Label(retrieveFrame,textvariable=gender,font=labelFont,bg='lightblue',fg='blue')
257 | retrieveGenderLabelData.grid(row=5,column=2)
258 | jobList=["Frycook","Register","Waiter","Stock Manager"]
259 | retrieveJobTypeOM=tk.OptionMenu(retrieveFrame,job,*jobList)
260 | retrieveJobTypeOM.grid(row=6,column=2)
261 | #Button
262 | retrievecButton=tk.Button(retrieveFrame,text="Retrieve",command=retrieve,font=buttonFont,bg="blue",fg="lightblue")
263 | retrievecButton.grid(row=8,column=2)
264 | backCButton=tk.Button(retrieveFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
265 | backCButton.grid(row=8,column=1)
266 |
267 | #Update Frame Widgets
268 | #updateFrame
269 | updateTLabel=tk.Label(updateFrame,text="Update Record In Table",font=titleFont,bg='lightblue',fg='blue')
270 | updateTLabel.grid(row=1,column=1,columnspan=5)
271 | updateSearchNameLabel=tk.Label(updateFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
272 | updateSearchNameLabel.grid(row=2,column=1)
273 | updateFNameLabel=tk.Label(updateFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
274 | updateFNameLabel.grid(row=3,column=1)
275 | updateSNameLabel=tk.Label(updateFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
276 | updateSNameLabel.grid(row=4,column=1)
277 | updateGenderLabel=tk.Label(updateFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
278 | updateGenderLabel.grid(row=5,column=1)
279 | updateJobTypeLabel=tk.Label(updateFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
280 | updateJobTypeLabel.grid(row=6,column=1)
281 | updateHourlyWageLabel=tk.Label(updateFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
282 | updateHourlyWageLabel.grid(row=7,column=1)
283 | #Label Widgets
284 | updateFNameLabel=tk.Entry(updateFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
285 | updateFNameLabel.grid(row=3,column=2)
286 | updateSNameLabel=tk.Entry(updateFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
287 | updateSNameLabel.grid(row=4,column=2)
288 | updateWageLabel=tk.Entry(updateFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
289 | updateWageLabel.grid(row=7,column=2)
290 | updateGenderRBM=tk.Radiobutton(updateFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
291 | updateGenderRBM.grid(row=5,column=2)
292 | updateGenderRBF=tk.Radiobutton(updateFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
293 | updateGenderRBF.grid(row=5,column=3)
294 | jobList=["Frycook","Register","Waiter","Stock Manager"]
295 | updateJobTypeOM=tk.OptionMenu(updateFrame,job,*jobList)
296 | updateJobTypeOM.grid(row=6,column=2)
297 | #Button
298 | updatecButton=tk.Button(updateFrame,text="Update",command=update,font=buttonFont,bg="blue",fg="lightblue")
299 | updatecButton.grid(row=8,column=2)
300 | backUButton=tk.Button(updateFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
301 | backUButton.grid(row=8,column=1)
302 |
303 | #Delete Frame Widgets
304 | #deleteFrame
305 | #Labels
306 | updateTLabel=tk.Label(deleteFrame,text="Delete Record In Table",font=titleFont,bg='lightblue',fg='blue')
307 | updateTLabel.grid(row=1,column=1,columnspan=5)
308 | deleteLabel=tk.Label(deleteFrame,text="Delete: ",font=labelFont,bg='lightblue',fg='blue')
309 | deleteLabel.grid(row=2,column=1)
310 | deleteButton=tk.Button(deleteFrame,text="Delete",command=delete,font=buttonFont,bg="blue",fg="lightblue")
311 | deleteButton.grid(row=2,column=3)
312 | backUButton=tk.Button(deleteFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
313 | backUButton.grid(row=3,column=3)
314 |
315 | #Updates Treeview on Initial Startup
316 | treeviewEmployeeUpdate()
317 | raiseFrame(treeviewFrame)
318 | root.mainloop()
319 |
320 |
--------------------------------------------------------------------------------
/CRUD Example (NO SQL).py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import messagebox
3 | from tkinter.font import Font
4 | from tkinter import scrolledtext
5 | from tkinter import ttk
6 | import mysql.connector
7 | import random
8 |
9 | # mydb definition
10 | # Connect MySQL
11 | if True:
12 | mydb = mysql.connector.connect(
13 | host="localhost",
14 | user="root",
15 | # Define Your Password and Database Name
16 | )
17 |
18 | # Outputs Connection Object
19 | print(mydb)
20 | mycursor = mydb.cursor()
21 | # Create mysql
22 | mycursor.execute(
23 | """CREATE TABLE IF NOT EXISTS employee(employeeID int ,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),jobtype VARCHAR(255),hourlywage int)""")
24 | # import mysql.connector
25 | root = tk.Tk()
26 | root.title("Cafe Fish System")
27 | # Define Frames
28 | treeviewFrame = tk.Frame(root)
29 | createFrame = tk.Frame(root)
30 | retrieveFrame = tk.Frame(root)
31 | updateFrame = tk.Frame(root)
32 | deleteFrame = tk.Frame(root)
33 |
34 | # Define Frame List
35 | frameList = [treeviewFrame, createFrame, updateFrame, retrieveFrame, deleteFrame]
36 | # Configure all Frames
37 | for frame in frameList:
38 | frame.grid(row=0, column=0, sticky='news')
39 | frame.configure(bg='lightblue')
40 |
41 |
42 | def raiseFrame(frame):
43 | frame.tkraise()
44 |
45 |
46 | def raiseBack():
47 | # Clear Variables
48 | firstName.set("")
49 | secondName.set("")
50 | gender.set("")
51 | wage.set(0.00)
52 | job.set("Frycook")
53 | treeviewEmployeeUpdate()
54 | treeviewFrame.tkraise()
55 |
56 |
57 | def raiseCreate():
58 | job.set("Frycook")
59 | gender.set("Male")
60 | createFrame.tkraise()
61 |
62 |
63 | def raiseRetrieve():
64 | nameList = []
65 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
66 | myresults = mycursor.fetchall()
67 | for i in myresults:
68 | name = i[0] + " " + i[1]
69 | nameList.append(name)
70 | searchOM = tk.OptionMenu(retrieveFrame, searchTerm, *nameList)
71 | searchOM.grid(row=2, column=2)
72 | retrieveFrame.tkraise()
73 |
74 |
75 | def raiseUpdate():
76 | nameList = []
77 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
78 | myresults = mycursor.fetchall()
79 | for i in myresults:
80 | name = i[0] + " " + i[1]
81 | nameList.append(name)
82 | searchOM = tk.OptionMenu(updateFrame, updateTerm, *nameList)
83 | searchOM.grid(row=2, column=2)
84 | job.set("Frycook")
85 | gender.set("Male")
86 | updateFrame.tkraise()
87 |
88 |
89 | def raiseDelete():
90 | nameList = []
91 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
92 | myresults = mycursor.fetchall()
93 | for i in myresults:
94 | name = i[0] + " " + i[1]
95 | nameList.append(name)
96 | searchOM = tk.OptionMenu(deleteFrame, deleteTerm, *nameList)
97 | searchOM.grid(row=2, column=2)
98 | deleteFrame.tkraise()
99 |
100 |
101 | # SQL
102 | def create():
103 | pass
104 |
105 |
106 | def retrieve():
107 | pass
108 |
109 |
110 | def update():
111 | pass
112 |
113 |
114 | def delete():
115 | pass
116 |
117 |
118 | def fillEntryFields(a, b, c):
119 | fName, sName = updateTerm.get().split(" ")
120 | SQL = """SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
121 | mycursor.execute(SQL, (fName, sName))
122 | myresults = mycursor.fetchone()
123 | firstName.set(myresults[0])
124 | secondName.set(myresults[1])
125 | gender.set(myresults[2])
126 | job.set(myresults[3])
127 | wage.set(myresults[4])
128 |
129 |
130 | def treeviewEmployeeUpdate():
131 | # Deletes Everything from Treeview
132 | Remove = EmployView.get_children()
133 | for child in Remove:
134 | EmployView.delete(child)
135 | # Adds Everything back into Treeview
136 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee")
137 | myresults = mycursor.fetchall()
138 | #
139 | for i in myresults:
140 | EmployView.insert("", "end", text="", values=(i[0], i[1], i[2], i[3], i[4]))
141 |
142 |
143 | # Tkinter Variable
144 | firstName = tk.StringVar()
145 | secondName = tk.StringVar()
146 | gender = tk.StringVar()
147 | wage = tk.StringVar()
148 | job = tk.StringVar()
149 |
150 | searchTerm = tk.StringVar()
151 | deleteTerm = tk.StringVar()
152 | updateTerm = tk.StringVar()
153 | updateTerm.trace('w', fillEntryFields)
154 | # Setting Default Values
155 | firstName.set("")
156 | secondName.set("")
157 | gender.set("")
158 | wage.set(0.00)
159 | job.set("Frycook")
160 | # Fonts
161 | titleFont = Font(family="Arial", size="48")
162 | labelFont = Font(family="Arial", size="24")
163 | buttonFont = Font(family="Arial", size="20")
164 | # treeview Frame Widgets
165 | EmployView = ttk.Treeview(treeviewFrame)
166 | EmployView["columns"] = ("firstname", "secondname", "gender", "jobtype", "hourlywage")
167 | EmployView.grid(row=2, column=1, columnspan=5)
168 | EmployView.heading("#0", text="", anchor="w")
169 | EmployView.column("#0", anchor="center", width=5, stretch=tk.NO)
170 | EmployView.heading("firstname", text="First Name", anchor="w")
171 | EmployView.column("firstname", anchor="center", width=80)
172 | EmployView.heading("secondname", text="Second Name", anchor="w")
173 | EmployView.column("secondname", anchor="center", width=90)
174 | EmployView.heading("gender", text="Gender", anchor="w")
175 | EmployView.column("gender", anchor="center", width=90)
176 | EmployView.heading("jobtype", text="Job Type", anchor="w")
177 | EmployView.column("jobtype", anchor="center", width=80)
178 | EmployView.heading("hourlywage", text="Hourly Wage", anchor="w")
179 | EmployView.column("hourlywage", anchor="center", width=80)
180 |
181 | # Labels
182 | titleLabel = tk.Label(treeviewFrame, text="Cafe Fish Employee Table", font=titleFont, bg='blue', fg='lightblue')
183 | titleLabel.grid(row=1, column=1, columnspan=5)
184 | # Buttons
185 | createButton = tk.Button(treeviewFrame, text="Create", font=buttonFont, bg='blue', fg='lightblue', command=raiseCreate)
186 | createButton.grid(row=3, column=1)
187 | retrieveButton = tk.Button(treeviewFrame, text="Retrieve", font=buttonFont, bg='blue', fg='lightblue',
188 | command=raiseRetrieve)
189 | retrieveButton.grid(row=3, column=2)
190 | updateButton = tk.Button(treeviewFrame, text="Update", font=buttonFont, bg='blue', fg='lightblue', command=raiseUpdate)
191 | updateButton.grid(row=3, column=3)
192 | deleteButton = tk.Button(treeviewFrame, text="Delete", font=buttonFont, bg='blue', fg='lightblue', command=raiseDelete)
193 | deleteButton.grid(row=3, column=4)
194 |
195 | # Create Frame Widgets
196 | # createFrame
197 | createTLabel = tk.Label(createFrame, text="Create Record In Table", font=titleFont, bg='lightblue', fg='blue')
198 | createTLabel.grid(row=1, column=1, columnspan=5)
199 | createFNameLabel = tk.Label(createFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
200 | createFNameLabel.grid(row=2, column=1)
201 | createSNameLabel = tk.Label(createFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
202 | createSNameLabel.grid(row=3, column=1)
203 | createGenderLabel = tk.Label(createFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
204 | createGenderLabel.grid(row=4, column=1)
205 | createJobTypeLabel = tk.Label(createFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
206 | createJobTypeLabel.grid(row=5, column=1)
207 | createHourlyWageLabel = tk.Label(createFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
208 | createHourlyWageLabel.grid(row=6, column=1)
209 | # Label Widgets
210 | createFNameLabel = tk.Entry(createFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
211 | createFNameLabel.grid(row=2, column=2)
212 | createSNameLabel = tk.Entry(createFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
213 | createSNameLabel.grid(row=3, column=2)
214 | createWageLabel = tk.Entry(createFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
215 | createWageLabel.grid(row=6, column=2)
216 | createGenderRBM = tk.Radiobutton(createFrame, text="Male", variable=gender, value="Male", font=labelFont,
217 | bg='lightblue', fg='blue')
218 | createGenderRBM.grid(row=4, column=2)
219 | createGenderRBF = tk.Radiobutton(createFrame, text="Female", variable=gender, value="Female", font=labelFont,
220 | bg='lightblue', fg='blue')
221 | createGenderRBF.grid(row=4, column=3)
222 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
223 | createJobTypeOM = tk.OptionMenu(createFrame, job, *jobList)
224 | createJobTypeOM.grid(row=5, column=2)
225 | # Button
226 | createcButton = tk.Button(createFrame, text="Create", command=create, font=buttonFont, bg="blue", fg="lightblue")
227 | createcButton.grid(row=7, column=2)
228 | backCButton = tk.Button(createFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
229 | backCButton.grid(row=7, column=1)
230 |
231 | # Retrieve Frame Widgets
232 | # retrieveFrame
233 | retrieveTLabel = tk.Label(retrieveFrame, text="Retrieve Record In Table", font=titleFont, bg='lightblue', fg='blue')
234 | retrieveTLabel.grid(row=1, column=1, columnspan=5)
235 | retrieveSearchLabel = tk.Label(retrieveFrame, text="Search Name: ", font=labelFont, bg='lightblue', fg='blue')
236 | retrieveSearchLabel.grid(row=2, column=1)
237 | retrieveFNameLabel = tk.Label(retrieveFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
238 | retrieveFNameLabel.grid(row=3, column=1)
239 | retrieveSNameLabel = tk.Label(retrieveFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
240 | retrieveSNameLabel.grid(row=4, column=1)
241 | retrieveGenderLabel = tk.Label(retrieveFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
242 | retrieveGenderLabel.grid(row=5, column=1)
243 | retrieveJobTypeLabel = tk.Label(retrieveFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
244 | retrieveJobTypeLabel.grid(row=6, column=1)
245 | retrieveHourlyWageLabel = tk.Label(retrieveFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
246 | retrieveHourlyWageLabel.grid(row=7, column=1)
247 | # Retrieved Data Label Widgets
248 | retrieveFNameLabelData = tk.Label(retrieveFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
249 | retrieveFNameLabelData.grid(row=3, column=2)
250 | retrieveSNameLabelData = tk.Label(retrieveFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
251 | retrieveSNameLabelData.grid(row=4, column=2)
252 | retrieveWageLabelData = tk.Label(retrieveFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
253 | retrieveWageLabelData.grid(row=7, column=2)
254 | retrieveGenderLabelData = tk.Label(retrieveFrame, textvariable=gender, font=labelFont, bg='lightblue', fg='blue')
255 | retrieveGenderLabelData.grid(row=5, column=2)
256 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
257 | retrieveJobTypeOM = tk.OptionMenu(retrieveFrame, job, *jobList)
258 | retrieveJobTypeOM.grid(row=6, column=2)
259 | # Button
260 | retrievecButton = tk.Button(retrieveFrame, text="Retrieve", command=retrieve, font=buttonFont, bg="blue",
261 | fg="lightblue")
262 | retrievecButton.grid(row=8, column=2)
263 | backCButton = tk.Button(retrieveFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
264 | backCButton.grid(row=8, column=1)
265 |
266 | # Update Frame Widgets
267 | # updateFrame
268 | updateTLabel = tk.Label(updateFrame, text="Update Record In Table", font=titleFont, bg='lightblue', fg='blue')
269 | updateTLabel.grid(row=1, column=1, columnspan=5)
270 | updateSearchNameLabel = tk.Label(updateFrame, text="Search Name: ", font=labelFont, bg='lightblue', fg='blue')
271 | updateSearchNameLabel.grid(row=2, column=1)
272 | updateFNameLabel = tk.Label(updateFrame, text="First Name: ", font=labelFont, bg='lightblue', fg='blue')
273 | updateFNameLabel.grid(row=3, column=1)
274 | updateSNameLabel = tk.Label(updateFrame, text="Second Name: ", font=labelFont, bg='lightblue', fg='blue')
275 | updateSNameLabel.grid(row=4, column=1)
276 | updateGenderLabel = tk.Label(updateFrame, text="Gender: ", font=labelFont, bg='lightblue', fg='blue')
277 | updateGenderLabel.grid(row=5, column=1)
278 | updateJobTypeLabel = tk.Label(updateFrame, text="Job Type: ", font=labelFont, bg='lightblue', fg='blue')
279 | updateJobTypeLabel.grid(row=6, column=1)
280 | updateHourlyWageLabel = tk.Label(updateFrame, text="Hourly Wage £: ", font=labelFont, bg='lightblue', fg='blue')
281 | updateHourlyWageLabel.grid(row=7, column=1)
282 | # Label Widgets
283 | updateFNameLabel = tk.Entry(updateFrame, textvariable=firstName, font=labelFont, bg='lightblue', fg='blue')
284 | updateFNameLabel.grid(row=3, column=2)
285 | updateSNameLabel = tk.Entry(updateFrame, textvariable=secondName, font=labelFont, bg='lightblue', fg='blue')
286 | updateSNameLabel.grid(row=4, column=2)
287 | updateWageLabel = tk.Entry(updateFrame, textvariable=wage, font=labelFont, width=5, bg='lightblue', fg='blue')
288 | updateWageLabel.grid(row=7, column=2)
289 | updateGenderRBM = tk.Radiobutton(updateFrame, text="Male", variable=gender, value="Male", font=labelFont,
290 | bg='lightblue', fg='blue')
291 | updateGenderRBM.grid(row=5, column=2)
292 | updateGenderRBF = tk.Radiobutton(updateFrame, text="Female", variable=gender, value="Female", font=labelFont,
293 | bg='lightblue', fg='blue')
294 | updateGenderRBF.grid(row=5, column=3)
295 | jobList = ["Frycook", "Register", "Waiter", "Stock Manager"]
296 | updateJobTypeOM = tk.OptionMenu(updateFrame, job, *jobList)
297 | updateJobTypeOM.grid(row=6, column=2)
298 | # Button
299 | updatecButton = tk.Button(updateFrame, text="Update", command=update, font=buttonFont, bg="blue", fg="lightblue")
300 | updatecButton.grid(row=8, column=2)
301 | backUButton = tk.Button(updateFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
302 | backUButton.grid(row=8, column=1)
303 |
304 | # Delete Frame Widgets
305 | # deleteFrame
306 | # Labels
307 | updateTLabel = tk.Label(deleteFrame, text="Delete Record In Table", font=titleFont, bg='lightblue', fg='blue')
308 | updateTLabel.grid(row=1, column=1, columnspan=5)
309 | deleteLabel = tk.Label(deleteFrame, text="Delete: ", font=labelFont, bg='lightblue', fg='blue')
310 | deleteLabel.grid(row=2, column=1)
311 | deleteButton = tk.Button(deleteFrame, text="Delete", command=delete, font=buttonFont, bg="blue", fg="lightblue")
312 | deleteButton.grid(row=2, column=3)
313 | backUButton = tk.Button(deleteFrame, text="Back", command=raiseBack, font=labelFont, bg="blue", fg="lightblue")
314 | backUButton.grid(row=3, column=3)
315 |
316 | # Updates Treeview on Initial Startup
317 | treeviewEmployeeUpdate()
318 | raiseFrame(treeviewFrame)
319 | root.mainloop()
320 |
321 |
--------------------------------------------------------------------------------
/Caesar Cipher & Statistical Analysis.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Caesar Cipher & Statistical Analysis.pptx
--------------------------------------------------------------------------------
/Calendar/Calendar.py:
--------------------------------------------------------------------------------
1 | import calendar
2 | import datetime
3 | import sys
4 |
5 | #imports correct version of tkinter based on python version
6 | if sys.version[0] == '2':
7 | import Tkinter as tk
8 | else:
9 | import tkinter as tk
10 |
11 |
12 | class Calendar:
13 | #Instantiation
14 | def __init__(self, parent, values):
15 | self.values = values
16 | self.parent = parent
17 | self.cal = calendar.TextCalendar(calendar.SUNDAY)
18 | self.year = datetime.date.today().year
19 | self.month = datetime.date.today().month
20 | self.wid = []
21 | self.day_selected = 1
22 | self.month_selected = self.month
23 | self.year_selected = self.year
24 | self.day_name = ''
25 |
26 | self.setup(self.year, self.month)
27 |
28 | #Resets the buttons
29 | def clear(self):
30 | for w in self.wid[:]:
31 | w.grid_forget()
32 | # w.destroy()
33 | self.wid.remove(w)
34 |
35 | #Moves to previous month/year on calendar
36 | def go_prev(self):
37 | if self.month > 1:
38 | self.month -= 1
39 | else:
40 | self.month = 12
41 | self.year -= 1
42 | # self.selected = (self.month, self.year)
43 | self.clear()
44 | self.setup(self.year, self.month)
45 |
46 | # Moves to next month/year on calendar
47 | def go_next(self):
48 | if self.month < 12:
49 | self.month += 1
50 | else:
51 | self.month = 1
52 | self.year += 1
53 |
54 | # self.selected = (self.month, self.year)
55 | self.clear()
56 | self.setup(self.year, self.month)
57 |
58 | #Called on date button press
59 | def selection(self, day, name):
60 | self.day_selected = day
61 | self.month_selected = self.month
62 | self.year_selected = self.year
63 | self.day_name = name
64 |
65 | # Obtaining data
66 | self.values['day_selected'] = day
67 | self.values['month_selected'] = self.month
68 | self.values['year_selected'] = self.year
69 | self.values['day_name'] = name
70 | self.values['month_name'] = calendar.month_name[self.month_selected]
71 |
72 | self.clear()
73 | self.setup(self.year, self.month)
74 |
75 | def setup(self, y, m):
76 | #Tkinter creation
77 | left = tk.Button(self.parent, text='<', command=self.go_prev)
78 | self.wid.append(left)
79 | left.grid(row=0, column=1)
80 |
81 | header = tk.Label(self.parent, height=2, text='{} {}'.format(calendar.month_abbr[m], str(y)))
82 | self.wid.append(header)
83 | header.grid(row=0, column=2, columnspan=3)
84 |
85 | right = tk.Button(self.parent, text='>', command=self.go_next)
86 | self.wid.append(right)
87 | right.grid(row=0, column=5)
88 |
89 | days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
90 | for num, name in enumerate(days):
91 | t = tk.Label(self.parent, text=name[:3])
92 | self.wid.append(t)
93 | t.grid(row=1, column=num)
94 |
95 | for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
96 | for d, day in enumerate(week):
97 | if day:
98 | # print(calendar.day_name[day])
99 | b = tk.Button(self.parent, width=1, text=day,
100 | command=lambda day=day: self.selection(day, calendar.day_name[(day) % 7]))
101 | self.wid.append(b)
102 | b.grid(row=w, column=d)
103 |
104 | sel = tk.Label(self.parent, height=2, text='{} {} {} {}'.format(
105 | self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected))
106 | self.wid.append(sel)
107 | sel.grid(row=8, column=0, columnspan=7)
108 |
109 | ok = tk.Button(self.parent, width=5, text='OK', command=self.kill_and_save)
110 | self.wid.append(ok)
111 | ok.grid(row=9, column=2, columnspan=3, pady=10)
112 | #Quit out of the calendar and terminate tkinter instance.
113 | def kill_and_save(self):
114 | self.parent.destroy()
115 |
--------------------------------------------------------------------------------
/Calendar/Control.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from Calendar import Calendar
3 | class Control:
4 | def __init__(self, parent):
5 | self.parent = parent
6 | self.choose_btn = tk.Button(self.parent, text='Choose', command=self.popup)
7 | self.show_btn = tk.Button(self.parent, text='Show Selected', command=self.print_selected_date)
8 | self.choose_btn.grid()
9 | self.show_btn.grid()
10 | self.data = {}
11 |
12 | def popup(self):
13 | child = tk.Toplevel()
14 | cal = Calendar(child, self.data)
15 |
16 | def print_selected_date(self):
17 | print(self.data)
18 |
--------------------------------------------------------------------------------
/CalendarV2/Calendar.py:
--------------------------------------------------------------------------------
1 | import calendar
2 | import datetime
3 | import sys
4 |
5 | # imports correct version of tkinter based on python version
6 | if sys.version[0] == '2':
7 | import Tkinter as tk
8 | else:
9 | import tkinter as tk
10 |
11 |
12 | class Calendar:
13 | # Instantiation
14 | def __init__(self, parent, values):
15 | self.values = values
16 | self.parent = parent
17 | self.cal = calendar.TextCalendar(calendar.SUNDAY)
18 | self.year = datetime.date.today().year
19 | self.month = datetime.date.today().month
20 | self.wid = []
21 | self.day_selected = 1
22 | self.month_selected = self.month
23 | self.year_selected = self.year
24 | self.day_name = ''
25 | self.COLOR_OF_CALENDAR_ARROWS = "lightblue"
26 | self.COLOR_OF_CALENDAR_LABEL = "lightblue"
27 | self.COLOR_OF_DAY_BUTTONS = "lightblue"
28 |
29 | self.setup(self.year, self.month)
30 |
31 | # Resets the buttons
32 | def clear(self):
33 | for w in self.wid[:]:
34 | w.grid_forget()
35 | # w.destroy()
36 | self.wid.remove(w)
37 |
38 | # Moves to previous month/year on calendar
39 | def go_prev(self):
40 | if self.month > 1:
41 | self.month -= 1
42 | else:
43 | self.month = 12
44 | self.year -= 1
45 | # self.selected = (self.month, self.year)
46 | self.clear()
47 | self.setup(self.year, self.month)
48 |
49 | # Moves to next month/year on calendar
50 | def go_next(self):
51 | if self.month < 12:
52 | self.month += 1
53 | else:
54 | self.month = 1
55 | self.year += 1
56 |
57 | # self.selected = (self.month, self.year)
58 | self.clear()
59 | self.setup(self.year, self.month)
60 |
61 | # Called on date button press
62 | def selection(self, day, name):
63 | self.day_selected = day
64 | self.month_selected = self.month
65 | self.year_selected = self.year
66 | self.day_name = name
67 |
68 | # Obtaining data
69 | self.values['day_selected'] = day
70 | self.values['month_selected'] = self.month
71 | self.values['year_selected'] = self.year
72 | self.values['day_name'] = name
73 | self.values['month_name'] = calendar.month_name[self.month_selected]
74 |
75 | self.clear()
76 | self.setup(self.year, self.month)
77 |
78 | def setup(self, y, m):
79 | # Tkinter creation
80 | left = tk.Button(self.parent, text='<', command=self.go_prev,bg=self.COLOR_OF_CALENDAR_ARROWS)
81 | self.wid.append(left)
82 | left.grid(row=0, column=1)
83 |
84 | header = tk.Label(self.parent, height=2,bg=self.COLOR_OF_CALENDAR_LABEL, text='{} {}'.format(calendar.month_abbr[m], str(y)))
85 | self.wid.append(header)
86 | header.grid(row=0, column=2, columnspan=3)
87 |
88 | right = tk.Button(self.parent, text='>', command=self.go_next,bg=self.COLOR_OF_CALENDAR_ARROWS)
89 | self.wid.append(right)
90 | right.grid(row=0, column=5)
91 |
92 | days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
93 | for num, name in enumerate(days):
94 | t = tk.Label(self.parent, text=name[:3],bg=self.COLOR_OF_CALENDAR_LABEL)
95 | self.wid.append(t)
96 | t.grid(row=1, column=num)
97 |
98 | for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
99 | for d, day in enumerate(week):
100 | if day:
101 | b = tk.Button(self.parent, width=1,bg=self.COLOR_OF_DAY_BUTTONS, text=day,
102 | command=lambda day=day: self.selection(day, calendar.day_name[(day) % 7]))
103 | self.wid.append(b)
104 | b.grid(row=w, column=d)
105 |
106 | sel = tk.Label(self.parent, height=2,bg=self.COLOR_OF_CALENDAR_LABEL, text='{} {} {} {}'.format(
107 | self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected))
108 | self.wid.append(sel)
109 | sel.grid(row=8, column=0, columnspan=7)
110 |
111 | # Quit out of the calendar and terminate tkinter instance.
112 | def kill_and_save(self):
113 | self.parent.destroy()
--------------------------------------------------------------------------------
/CalendarV2/CalendarView.py:
--------------------------------------------------------------------------------
1 | import calendar
2 | import datetime
3 | import sys
4 | import csv
5 |
6 | # imports correct version of tkinter based on python version
7 | if sys.version[0] == '2':
8 | import Tkinter as tk
9 | else:
10 | import tkinter as tk
11 |
12 |
13 | class CalendarView:
14 | # Instantiation
15 | def __init__(self, parent, values):
16 | self.values = values
17 | self.parent = parent
18 | self.cal = calendar.TextCalendar(calendar.SUNDAY)
19 | self.year = datetime.date.today().year
20 | self.month = datetime.date.today().month
21 | self.wid = []
22 | self.day_selected = 1
23 | self.month_selected = self.month
24 | self.year_selected = self.year
25 | self.day_name = ''
26 | self.COLOR_OF_CALENDAR_ARROWS = "lightblue"
27 | self.COLOR_OF_CALENDAR_LABEL = "lightblue"
28 | self.COLOR_OF_DAY_BUTTONS = "lightblue"
29 | self.COLOR_OF_APP_DAY_BUTTONS = "red"
30 |
31 | self.setup(self.year, self.month)
32 |
33 | # Resets the buttons
34 | def clear(self):
35 | for w in self.wid[:]:
36 | w.grid_forget()
37 | # w.destroy()
38 | self.wid.remove(w)
39 |
40 | # Moves to previous month/year on calendar
41 | def go_prev(self):
42 | if self.month > 1:
43 | self.month -= 1
44 | else:
45 | self.month = 12
46 | self.year -= 1
47 | # self.selected = (self.month, self.year)
48 | self.clear()
49 | self.setup(self.year, self.month)
50 |
51 | # Moves to next month/year on calendar
52 | def go_next(self):
53 | if self.month < 12:
54 | self.month += 1
55 | else:
56 | self.month = 1
57 | self.year += 1
58 |
59 | # self.selected = (self.month, self.year)
60 | self.clear()
61 | self.setup(self.year, self.month)
62 |
63 | # Called on date button press
64 | def selection(self, day, name):
65 | #Code goes here when user selects a day button.
66 | pass
67 |
68 | def setup(self, y, m):
69 | # Tkinter creation
70 | left = tk.Button(self.parent, text='<', command=self.go_prev,bg=self.COLOR_OF_CALENDAR_ARROWS)
71 | self.wid.append(left)
72 | left.grid(row=0, column=1)
73 |
74 | header = tk.Label(self.parent, height=2,bg=self.COLOR_OF_CALENDAR_LABEL, text='{} {}'.format(calendar.month_abbr[m], str(y)))
75 | self.wid.append(header)
76 | header.grid(row=0, column=2, columnspan=3)
77 |
78 | right = tk.Button(self.parent, text='>', command=self.go_next,bg=self.COLOR_OF_CALENDAR_ARROWS)
79 | self.wid.append(right)
80 | right.grid(row=0, column=5)
81 |
82 | days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
83 | for num, name in enumerate(days):
84 | t = tk.Label(self.parent, text=name[:3],bg=self.COLOR_OF_CALENDAR_LABEL)
85 | self.wid.append(t)
86 | t.grid(row=1, column=num)
87 | #Read Appointments
88 | appointments=[]
89 | bookedDays=[]
90 | with open("appointments.txt", 'r') as appFile:
91 | reader = csv.reader(appFile)
92 | for row in reader:
93 | # removes empty list from loop
94 | if len(row) > 0:
95 | #Check for appointments made by this user
96 | if row[0] in self.values:
97 | #Parse the date into day,month,year
98 | dayInt,monthInt,yearInt = row[1].split("/")
99 | appointments.append((int(dayInt),int(monthInt),int(yearInt)))
100 |
101 | print("appointments:"+str(appointments))
102 | for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
103 | for d, day in enumerate(week):
104 | if day:
105 | # determine the color of current calendar day
106 | color = self.COLOR_OF_APP_DAY_BUTTONS if (day, m, y) in appointments else self.COLOR_OF_DAY_BUTTONS
107 | btn = tk.Button(self.parent, text=day, bg=color,
108 | command=lambda day=day: self.selection(day, calendar.day_name[day % 7]))
109 | btn.grid(row=w, column=d, sticky='nsew')
110 |
111 |
112 | # Quit out of the calendar and terminate tkinter instance.
113 | def kill_and_save(self):
114 | self.parent.destroy()
--------------------------------------------------------------------------------
/CalendarV2/SwimSchool.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | import csv
3 | import sys
4 | import os.path
5 | from tkinter import messagebox
6 | from PIL import Image,ImageTk
7 | from Calendar import Calendar
8 | from CalendarView import CalendarView
9 |
10 | root = tk.Tk()
11 | root.title("Swim School")
12 | #Tikinter Vars
13 | username = tk.StringVar()
14 | password = tk.StringVar()
15 | name = tk.StringVar()
16 | loggedInLabel = tk.StringVar()
17 | hours = tk.IntVar()
18 | minutes = tk.IntVar()
19 | #Functions
20 | def setup():
21 | #Used to make the two textfiles if they don't already exist
22 | file_exists = os.path.isfile("users.txt")
23 | if file_exists:
24 | pass
25 | else:
26 | file = open("users.txt", "w+")
27 | file.close()
28 | file_exists = os.path.isfile("appointments.txt")
29 | if file_exists:
30 | pass
31 | else:
32 | file = open("appointments.txt", "w+")
33 | file.close()
34 | def raiseFrame(frame):
35 | frame.tkraise()
36 | def moveToReg():
37 | raiseFrame(regFrame)
38 | def moveToLogin():
39 | raiseFrame(start)
40 | def moveToBook():
41 | raiseFrame(bookAppointment)
42 | # Calendar
43 | def moveToUser():
44 | raiseFrame(userFrame)
45 | def register():
46 | entries = []
47 | with open ("users.txt",'a',newline="") as userFile:
48 | writer = csv.writer(userFile)
49 | writeList = [name.get(),username.get(),password.get()]
50 | writer.writerow(writeList)
51 | userFile.close()
52 | #Clear entry boxes
53 | username.set("")
54 | password.set("")
55 | raiseFrame(start)
56 |
57 | def makeAppointment(calendarViewFrame):
58 | #Format date
59 | date = str(datePickercalendar.day_selected)+"/"+str(datePickercalendar.month_selected)+"/"+str(datePickercalendar.year_selected)
60 | #Format time
61 | minutesString=str(minutes.get())
62 | if minutes.get()==0:
63 | minutesString = "00"
64 | time = str(hours.get())+":"+minutesString
65 | with open ("appointments.txt",'a',newline="") as appFile:
66 | writer = csv.writer(appFile)
67 | writeList = [name.get(),date,time]
68 | writer.writerow(writeList)
69 | appFile.close()
70 | messagebox.showinfo("Success!","Appointment made!")
71 | calendarViewFrame = tk.Frame(userFrame, borderwidth=5, bg="lightblue")
72 | calendarViewFrame.grid(row=2, column=1, columnspan=5)
73 | viewCalendar = CalendarView(calendarViewFrame, {name.get()})
74 | raiseFrame(userFrame)
75 |
76 | def login():
77 | with open("users.txt",'r') as userFile:
78 | reader = csv.reader(userFile)
79 | for row in reader:
80 | #removes empty list from loop
81 | if len(row)>0:
82 | if username.get()==row[1] and password.get()==row[2]:
83 | print(row[0]+" has logged in!")
84 | #Set welcome message
85 | loggedInLabel.set("Welcome, "+row[0])
86 | # Calendar View
87 | global calendarViewFrame
88 | calendarViewFrame = tk.Frame(userFrame, borderwidth=5, bg="lightblue")
89 | calendarViewFrame.grid(row=2, column=1, columnspan=5)
90 | viewCalendar = CalendarView(calendarViewFrame, {row[0]})
91 | name.set(row[0])
92 | raiseFrame(userFrame)
93 |
94 | def logOut():
95 | #Clear Entry boxes
96 | name.set("")
97 | username.set("")
98 | password.set("")
99 | raiseFrame(start)
100 | #Call setup
101 | setup()
102 | #Define Frame
103 | start = tk.Frame(root)
104 | regFrame = tk.Frame(root)
105 | userFrame = tk.Frame(root)
106 | bookAppointment = tk.Frame(root)
107 | frameList=[start,regFrame,userFrame,bookAppointment]
108 | #Configure all (main) Frames
109 | for frame in frameList:
110 | frame.grid(row=0,column=0, sticky='news')
111 | frame.configure(bg='lightblue')
112 |
113 | #Define Image
114 | swimimage=Image.open("swimmerIcon.png")
115 | swimimagePH=ImageTk.PhotoImage(swimimage)
116 | #Labels
117 | tk.Label(start,text="Swim School",font=("Courier", 60),bg='lightblue').grid(row=0,column=1,columnspan=5)
118 | tk.Label(start,image=swimimagePH,bg='lightblue').grid(row=1,column=1,columnspan=5)
119 | tk.Label(start,text="Username: ",font=("Courier", 22),bg='lightblue').grid(row=2,column=1)
120 | tk.Label(start,text="Password: ",font=("Courier", 22),bg='lightblue').grid(row=3,column=1)
121 |
122 | tk.Label(regFrame,text="Register",font=("Courier", 44),bg='lightblue').grid(row=1,column=1,columnspan=5)
123 | tk.Label(regFrame,text="Name: ",font=("Courier", 22),bg='lightblue').grid(row=2,column=1)
124 | tk.Label(regFrame,text="Username: ",font=("Courier", 22),bg='lightblue').grid(row=3,column=1)
125 | tk.Label(regFrame,text="Password: ",font=("Courier", 22),bg='lightblue').grid(row=4,column=1)
126 |
127 | tk.Label(userFrame,textvariable = loggedInLabel,font=("Courier", 44),bg='lightblue',fg="blue").grid(row=1,column=1,columnspan=5)
128 |
129 | tk.Label(bookAppointment,text="Book an Appointment",font=("Courier", 44),bg='lightblue').grid(row=1,column=1,columnspan=5)
130 | tk.Label(bookAppointment,text="Select a Date: ",font=("Courier", 22),bg='lightblue').grid(row=2,column=1)
131 | tk.Label(bookAppointment,text="Select a Time: ",font=("Courier", 22),bg='lightblue').grid(row=3,column=1)
132 | #Entry Boxes
133 | tk.Entry(start,textvariable=username,font=("Courier", 22),bg='lightblue').grid(row=2,column=2)
134 | tk.Entry(start,textvariable=password,font=("Courier", 22),bg='lightblue').grid(row=3,column=2)
135 |
136 | tk.Entry(regFrame,textvariable=name,font=("Courier", 22),bg='lightblue').grid(row=2,column=2)
137 | tk.Entry(regFrame,textvariable=username,font=("Courier", 22),bg='lightblue').grid(row=3,column=2)
138 | tk.Entry(regFrame,textvariable=password,font=("Courier", 22),bg='lightblue').grid(row=4,column=2)
139 | #Buttons
140 | tk.Button(start,font=("Courier", 22),bg='cyan',text="Login",command=login).grid(row=4,column=2)
141 | tk.Button(start,font=("Courier", 22),bg='cyan',text="Register",command=moveToReg).grid(row=4,column=1)
142 |
143 | tk.Button(regFrame,font=("Courier", 22),bg='cyan',text="Register",command=register).grid(row=5,column=2)
144 | tk.Button(regFrame,font=("Courier", 22),bg='cyan',text="Back",command=moveToLogin).grid(row=5,column=1)
145 |
146 | tk.Button(userFrame,font=("Courier", 22),bg='cyan',text="Log Out",command=logOut).grid(row=3,column=1)
147 | tk.Button(userFrame,font=("Courier", 22),bg='cyan',text="Book Appointment",command=moveToBook).grid(row=3,column=2)
148 |
149 | tk.Button(bookAppointment,font=("Courier", 22),bg='cyan',text="Make Appointment",command=lambda :makeAppointment(calendarViewFrame)).grid(row=5,column=2)
150 | tk.Button(bookAppointment,font=("Courier", 22),bg='cyan',text="Back",command=moveToUser).grid(row=5,column=1)
151 |
152 |
153 | #Time Selector
154 | timeSelectFrame = tk.Frame(bookAppointment,borderwidth=5,bg="lightblue")
155 | timeSelectFrame.grid(row=3,column=2)
156 | tk.Spinbox(timeSelectFrame,from_=1, to=24,bg="lightblue",width=2,textvariable=hours).grid(row=1,column=1)
157 | tk.Label(timeSelectFrame,text=":",bg="lightblue").grid(row=1,column=2)
158 | tk.Spinbox(timeSelectFrame,width=2,textvariable=minutes,values=(0,15,30,45),bg="lightblue").grid(row=1,column=3)
159 |
160 | calendarFrame = tk.Frame(bookAppointment, borderwidth=5, bg="lightblue")
161 | calendarFrame.grid(row=2, column=2, columnspan=5)
162 | datePickercalendar = Calendar(calendarFrame, {})
163 | #Raise Initial Frame
164 | raiseFrame(start)
165 | root.mainloop()
--------------------------------------------------------------------------------
/CalendarV2/swimmerIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/CalendarV2/swimmerIcon.png
--------------------------------------------------------------------------------
/Data Mining.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Data Mining.pptx
--------------------------------------------------------------------------------
/Data Mining.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import quandl
3 | import math , datetime
4 | import numpy as np
5 | from sklearn import preprocessing,model_selection, svm
6 | from sklearn.linear_model import LinearRegression
7 | import matplotlib.pyplot as plt
8 | from matplotlib import style
9 | import pickle
10 | style.use('ggplot')
11 |
12 | #df is dataframe
13 | #Obtaining data
14 | df = quandl.get('WIKI/GOOGL')
15 | #Obtaining default features
16 | df = df[['Adj. Open','Adj. High','Adj. Low','Adj. Close','Adj. Volume',]]
17 | #Works out the High Low Percent and makes new feature collumn
18 | df['HL_PCT'] = (df['Adj. High']-df['Adj. Close']) / df['Adj. Close'] *100
19 | #Works out the Percentage Change and makes new feature collumn
20 | df['PCT_change'] = (df['Adj. Close']-df['Adj. Open']) / df['Adj. Open'] *100
21 | #Refining dataframe with only the important/useful features
22 | df = df[['Adj. Close','HL_PCT','PCT_change','Adj. Volume']]
23 |
24 | forecast_col = 'Adj. Close'
25 | #Filling in null values with nonsense value
26 | df.fillna(-99999, inplace=True)
27 |
28 | #Forecast (Prediction)
29 | #Math.ceil prevents decimal
30 | forecast_out = int(math.ceil(0.01*len(df)))
31 | #No of days perdicted
32 | print(forecast_out)
33 | df['label'] = df[forecast_col].shift(-forecast_out)
34 |
35 | X = np.array(df.drop(['label'], 1))
36 | X = preprocessing.scale(X)
37 | X = X[:-forecast_out]
38 | X_lately = X[-forecast_out:]
39 | df.dropna(inplace=True)
40 | y = np.array(df['label'])
41 | X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.2)
42 | #njobs = number of threads
43 | clf = LinearRegression(n_jobs=10)
44 | #Training the classifier
45 | clf.fit(X_train, y_train)
46 |
47 | #Pickiling (saving) Trained classfile so we don't have to train again
48 | with open('linearregression.pickle','wb') as f:
49 | pickle.dump(clf,f)
50 | pickle_in = open('linearregression.pickle','rb')
51 | clf = pickle.load(pickle_in)
52 |
53 |
54 | accuracy = clf.score(X_test,y_test)
55 |
56 | forecast_set=clf.predict(X_lately)
57 | print(forecast_set, accuracy , forecast_out)
58 |
59 | df['Forecast'] = np.nan
60 | last_date = df.iloc[-1].name
61 | last_unix = last_date.timestamp()
62 | one_day = 86400
63 | next_unix = last_unix + one_day
64 |
65 | for i in forecast_set:
66 | next_date = datetime.datetime.fromtimestamp(next_unix)
67 | next_unix += one_day
68 | df.loc[next_date]= [np.nan for _ in range(len(df.columns)-1)] +[i]
69 |
70 | df['Adj. Close'].plot()
71 | df['Forecast'].plot()
72 | plt.legend(loc=4)
73 | plt.xlabel('Date')
74 | plt.ylabel('Price')
75 | plt.show()
--------------------------------------------------------------------------------
/DataValidation/DataValidation.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 |
3 | root=tk.Tk()
4 | root.title("Error Checking Tutorial GUI")
5 | root.configure(bg="white")
6 | #Tkinter Variables
7 | nameInput = tk.StringVar()
8 | ageInput = tk.StringVar()
9 | genderInput = tk.StringVar()
10 | #Error Checking Functions
11 | def PresenceCheck(input):
12 | if len(str(input))>0:
13 | return True
14 | else:
15 | print("Presence Check Failed")
16 | return False
17 | def RangeCheck(input,high,low):
18 | if int(input)>=low and high>=int(input):
19 | return True
20 | else:
21 | print("Range Check Failed: "+ str(input))
22 | return False
23 | def LengthCheck(input,desiredLowSize,desiredHighSize):
24 | if len(input)>= desiredLowSize and len(input)<= desiredHighSize:
25 | return True
26 | else:
27 | print("Length Check Failed: "+str(input))
28 | return False
29 | def LookupCheck(input,Options):
30 | if input in Options:
31 | return True
32 | else:
33 | print("Lookup Check Failed : "+str(input))
34 | return False
35 | def TypeCheck(input,datatype):
36 | if datatype == "str":
37 | if input.isalpha():
38 | return True
39 | else:
40 | print("Type Check Failed: "+str(input))
41 | return False
42 | if datatype == "int":
43 | if input.isnumeric():
44 | return True
45 | else:
46 | print("Type Check Failed: " + str(input))
47 | return False
48 | def FormatCheck(input,mustContain):
49 | if mustContain in input:
50 | return True
51 | else:
52 | print("Format Check Failed: "+str(input))
53 | return False
54 |
55 | def nameValidation(name, event = None):
56 | if PresenceCheck(name) and TypeCheck(name,"str"):
57 | if LengthCheck(name,2,20):
58 | print("Valid Name")
59 | else:
60 | nameEntry.configure(bg="red")
61 | else:
62 | nameEntry.configure(bg="red")
63 |
64 | def ageValidation(age, event = None):
65 | if PresenceCheck(age) and TypeCheck(age,"int"):
66 | if RangeCheck(age,120,10):
67 | print("Valid Age")
68 | else:
69 | ageEntry.configure(bg="red")
70 | else:
71 | ageEntry.configure(bg="red")
72 |
73 | def genderValidation(gender, event = None):
74 | if LookupCheck(gender,["Male","Female"]):
75 | print("Valid Gender")
76 | else:
77 | genderEntry.configure(bg="red")
78 |
79 |
80 |
81 | def Reset():
82 | nameInput.set("")
83 | nameEntry.configure(bg="white")
84 | ageInput.set("")
85 | ageEntry.configure(bg="white")
86 | genderInput.set("")
87 | genderEntry.configure(bg="white")
88 |
89 | tk.Label(root,text="Error Checking Tutorial",bg="white",font=("Arial",44)).grid(row=1,column=1,columnspan=5)
90 | tk.Label(root,text="Name: ",bg="white",font=("Arial",28)).grid(row=2,column=1)
91 | nameEntry = tk.Entry(root,textvariable=nameInput,bg="white",font=("Arial",28))
92 | nameEntry.grid(row=2,column=2)
93 | nameEntry.bind("", lambda _: nameValidation(nameInput.get()))
94 | tk.Label(root,text="Age: ",bg="white",font=("Arial",28),).grid(row=3,column=1)
95 | ageEntry = tk.Entry(root,textvariable=ageInput,bg="white",font=("Arial",28))
96 | ageEntry.grid(row=3,column=2)
97 | ageEntry.bind("", lambda _: ageValidation(ageInput.get()))
98 | #tk.Spinbox(root,textvariable=ageInput,from_=1,to=10,font=("Arial",28),width=2).grid(row=3,column=2)
99 | tk.Label(root,text="Gender: ",bg="white",font=("Arial",28)).grid(row=4,column=1)
100 | #genderOptionsList = ["Male","Female"]
101 | #genderOptionMenu = tk.OptionMenu(root,genderInput,*genderOptionsList).grid(row=4,column=2)
102 | genderEntry=tk.Entry(root,textvariable=genderInput,bg="white",font=("Arial",28))
103 | genderEntry.grid(row=4,column=2)
104 | genderEntry.bind("", lambda _: genderValidation(genderInput.get()))
105 |
106 | tk.Button(root,text="Reset",font=("Arial",28),command=Reset,bg="white").grid(row=1,column=6)
107 |
108 |
109 | root.mainloop()
--------------------------------------------------------------------------------
/DatabaseGraphs/GraphsDB.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | import mysql.connector
3 | import config
4 | import random
5 | if True:
6 | mydb = mysql.connector.connect(
7 | host="localhost",
8 | user="root",
9 | passwd=config.Password,
10 | database="schooldb"
11 | )
12 | print(mydb)
13 | mycursor = mydb.cursor()
14 | mycursor.execute("""CREATE TABLE IF NOT EXISTS students (firstname VARCHAR(255),secondname VARCHAR(255),subject VARCHAR(255), score int)""")
15 |
16 | """
17 | #Function to populate database
18 | def RandomStudentMaker(NoOfStudents):
19 | studentFNames = ["Alex","Brad","Diane","Jimmy","Logan","Harry","Susan","Olivia","Beth","Amy","Charles","Megan","Gareth","Tony"]
20 | studentSNames=["Gaston","Leslie","Copeland","Smith","Dill","Brown","Rowan","Austin","Harley","Eakin","Colgan","Fry","Cook","Laurie"]
21 | subjectNames=["Chemistry","Biology","Computer Science"]
22 | insertStudentSQL="INSERT INTO students (firstname,secondname,subject,score) VALUES(%s,%s,%s,%s)"
23 |
24 | for i in range(0,NoOfStudents):
25 | print("here")
26 | mycursor.execute(insertStudentSQL,(random.choice(studentFNames),random.choice(studentSNames),random.choice(subjectNames),random.randint(0,100)))
27 | mydb.commit()
28 | RandomStudentMaker(20)
29 | """
30 | subjects = ["Chemistry","Biology","Computer Science"]
31 | def CreateScoreBarChart(subject):
32 | GetScoreSQL="""SELECT firstname,secondname,score FROM students WHERE subject=%s"""
33 | mycursor.execute(GetScoreSQL,(subject,))
34 | myresults = mycursor.fetchall()
35 | fullnames = []
36 | scores = []
37 | for person in myresults:
38 | fullname=person[0]+" "+person[1]
39 | fullnames.append(fullname)
40 | scores.append(person[2])
41 |
42 | plt.bar(fullnames,scores,align="center",alpha=0.5,color=['b'])
43 | plt.xticks(fullnames,fullnames)
44 | plt.ylabel("Score")
45 | plt.xlabel("Full Name")
46 | plt.title(subject+"'s Class Scores")
47 | plt.savefig(subject+"'s Class Scores")
48 | plt.show()
49 | #CreateScoreBarChart("Chemistry")
50 | #CreateScoreBarChart("Biology")
51 | #CreateScoreBarChart("Computer Science")
52 | def CreatePieChart(subjects):
53 | GetCount="SELECT COUNT(*) FROM students WHERE subject=%s"
54 | values = []
55 | for subject in subjects:
56 | mycursor.execute(GetCount,(subject,))
57 | count = mycursor.fetchone()[0]
58 | values.append(count)
59 | print(values)
60 | plt.pie(values,labels=subjects,colors=['r','g','b'],autopct='%1.1f%%')
61 | plt.title("Number of Students Per Subject")
62 | plt.axis('equal')
63 | plt.savefig("Number of Students Per Subject")
64 |
65 | CreatePieChart(subjects)
66 |
67 |
68 |
--------------------------------------------------------------------------------
/Edit Interface.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 | import mysql.connector
4 | from tkinter import messagebox
5 | import random
6 | #Connecting MySQL to Python
7 | mydb = mysql.connector.connect(
8 | host="localhost",
9 | user="root",
10 | passwd="password123",
11 | database="testdatabase"
12 | )
13 | #Checking if database has connected
14 | print(mydb)
15 | #Define Cursor
16 | mycursor= mydb.cursor()
17 | userTableSQL="""CREATE TABLE IF NOT EXISTS users (userID int,username VARCHAR(255),password VARCHAR(255),stakeholder VARCHAR(255))"""
18 | mycursor.execute(userTableSQL)
19 | employeeTableSQL="""CREATE TABLE IF NOT EXISTS employee (employeeID int,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),userID int)"""
20 | mycursor.execute(employeeTableSQL)
21 | managerTableSQL="""CREATE TABLE IF NOT EXISTS manager (managerID int,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),userID int)"""
22 | mycursor.execute(managerTableSQL)
23 | menuTableSQL="""CREATE TABLE IF NOT EXISTS menu (itemID int,name VARCHAR(255),price int,tastyrating int)"""
24 | mycursor.execute(menuTableSQL)
25 |
26 | #Declare Root
27 | root = tk.Tk()
28 | root.title("Login System")
29 | #Define Frames
30 | loginFrame=tk.Frame(root)
31 | registerFrame=tk.Frame(root)
32 | managerMenuFrame=tk.Frame(root)
33 | employeeMenuFrame=tk.Frame(root)
34 | editMenuFrame=tk.Frame(root)
35 | frameList=[loginFrame,registerFrame,managerMenuFrame,employeeMenuFrame,editMenuFrame]
36 | #Configure all Frames
37 | for frame in frameList:
38 | frame.grid(row=0,column=0, sticky='news')
39 | frame.configure(bg='white')
40 | #Frame Raise Function
41 | def raiseFrame(frame):
42 | frame.tkraise()
43 | #Move To Reg Function
44 | def moveToReg():
45 | raiseFrame(registerFrame)
46 | def moveToLog():
47 | raiseFrame(loginFrame)
48 | def register():
49 | #Generate UserID
50 | userID=random.randint(1,5000)
51 | #Insert Into Usertable
52 | userInsertSQL="""INSERT INTO users (userID,username,password,stakeholder) VALUES (%s,%s,%s,%s)"""
53 | mycursor.execute(userInsertSQL,(userID,inputedUsername.get(),inputedPassword.get(),inputedStakeholder.get()))
54 | mydb.commit()
55 | # Determine which table to place new user into
56 | if inputedStakeholder.get() == "Employee":
57 | employeeID=random.randint(1,5000)
58 | employeeInsertSQL="""INSERT INTO employee (employeeID,firstname,secondname,gender,userID) VALUES(%s,%s,%s,%s,%s)"""
59 | mycursor.execute(employeeInsertSQL,(employeeID,inputedFirstName.get(),inputedSecondName.get(),inputedGender.get(),userID))
60 | mydb.commit()
61 | #Clear Tkinter Vars Used
62 | inputedUsername.set("")
63 | inputedPassword.set("")
64 | inputedStakeholder.set("")
65 | inputedFirstName.set("")
66 | inputedSecondName.set("")
67 | inputedGender.set("")
68 | raiseFrame(loginFrame)
69 | messagebox.showinfo("Success", "Register Successful")
70 | elif inputedStakeholder.get() == "Manager":
71 | managerID=random.randint(1,5000)
72 | managerInsertSQL="""INSERT INTO manager (managerID,firstname,secondname,gender,userID) VALUES(%s,%s,%s,%s,%s)"""
73 | mycursor.execute(managerInsertSQL,(managerID,inputedFirstName.get(),inputedSecondName.get(),inputedGender.get(),userID))
74 | mydb.commit()
75 | #Clear Tkinter Vars Used
76 | inputedUsername.set("")
77 | inputedPassword.set("")
78 | inputedStakeholder.set("")
79 | inputedFirstName.set("")
80 | inputedSecondName.set("")
81 | inputedGender.set("")
82 | raiseFrame(loginFrame)
83 | messagebox.showinfo("Success","Register Successful")
84 | else:
85 | pass
86 | def login():
87 | found=False
88 | usercredentialsSQL="""SELECT userID,username,password,stakeholder FROM users"""
89 | mycursor.execute(usercredentialsSQL)
90 | myusers=mycursor.fetchall()
91 | for user in myusers:
92 | if user[1] == inputedUsername.get() and user[2] == inputedPassword.get():
93 | found=True
94 | if user[3]=="Employee":
95 | findUserSQL="""SELECT firstname,secondname,gender FROM employee WHERE userID=%s"""
96 | mycursor.execute(findUserSQL,(user[0],))
97 | myresults=mycursor.fetchone()
98 | stringGreet=f"Hello Employee {myresults[0]} {myresults[1]} who is {myresults[2]}"
99 | employeeGreeting.set(stringGreet)
100 | raiseFrame(employeeMenuFrame)
101 |
102 | #Labels
103 | elif user[3]=="Manager":
104 | findUserSQL="""SELECT firstname,secondname,gender FROM manager WHERE userID=%s"""
105 | mycursor.execute(findUserSQL,(user[0],))
106 | myresults=mycursor.fetchone()
107 | stringGreet = f"Hello Manager {myresults[0]} {myresults[1]} who is {myresults[2]}"
108 | managerGreeting.set(stringGreet)
109 | raiseFrame(managerMenuFrame)
110 | #Labels
111 | else:
112 | #No Stakeholder Table Defined for this user yet.
113 | pass
114 | if found==False:
115 | # Invalid Username Or Password
116 | messagebox.showerror("ERROR", "Invalid Username Or Password!")
117 |
118 | def delete():
119 | DeleteSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
120 | mycursor.execute(DeleteSQL,(employeeFireFName.get(),employeeFireSName.get()))
121 | mydb.commit()
122 | messagebox.showinfo("Success!","Successful Deletion")
123 |
124 | def editMenuRaiseFrame():
125 | editItemNameList=[]
126 | getItemNames="""SELECT name FROM menu"""
127 | mycursor.execute(getItemNames)
128 | myresults=mycursor.fetchall()
129 | for result in myresults:
130 | editItemNameList.append(result[0])
131 | editMenuOptionMenu = tk.OptionMenu(editMenuFrame, editItemName, *editItemNameList)
132 | editMenuOptionMenu.grid(row=2,column=2)
133 | raiseFrame(editMenuFrame)
134 |
135 | def optionChanged(*args):
136 | findMenuItemSQL="""SELECT name,price,tastyrating FROM menu WHERE name=%s"""
137 | mycursor.execute(findMenuItemSQL,(editItemName.get(),))
138 | myresult= mycursor.fetchone()
139 | editMenuName.set(myresult[0])
140 | editMenuPrice.set(myresult[1])
141 | editMenuTasty.set(myresult[2])
142 |
143 | def editMenu():
144 | editMenuSQL="""UPDATE menu SET name=%s,price=%s,tastyrating=%s WHERE name=%s"""
145 | mycursor.execute(editMenuSQL,(editMenuName.get(),editMenuPrice.get(),editMenuTasty.get(),editItemName.get()))
146 | mydb.commit()
147 | messagebox.showinfo("Edit Success","Edit Successful")
148 | raiseFrame(managerMenuFrame)
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 | #Tkinter Vars
157 | inputedUsername=tk.StringVar()
158 | inputedPassword=tk.StringVar()
159 | inputedFirstName=tk.StringVar()
160 | inputedSecondName=tk.StringVar()
161 | inputedGender=tk.StringVar()
162 | genderOptions=['Male','Female','Other']
163 | inputedGender.set('Male')
164 | inputedStakeholder=tk.StringVar()
165 | stakeholderOptions=['Employee','Manager']
166 | inputedStakeholder.set("Employee")
167 | employeeFireFName=tk.StringVar()
168 | employeeFireSName=tk.StringVar()
169 | editMenuName=tk.StringVar()
170 | editMenuPrice=tk.IntVar()
171 | editMenuTasty=tk.IntVar()
172 | editItemNameList=[]
173 | editItemName=tk.StringVar()
174 | editItemName.trace("w", optionChanged)
175 |
176 | #Fonts
177 | titleFont = Font(family="Arial", size="48")
178 | labelFont = Font(family="Arial", size="24")
179 | buttonFont =Font(family="Arial",size = "20")
180 |
181 | #Stakeholder Menus
182 | employeeGreeting=tk.StringVar()
183 | employeeGreeting.set("")
184 | managerGreeting=tk.StringVar()
185 | managerGreeting.set("")
186 | #Login Frame Widgets
187 | #Labels
188 | titleLabel=tk.Label(loginFrame,text="System Name",font=titleFont,fg='green',bg='white')
189 | titleLabel.grid(row=1,column=1,columnspan=5)
190 | helplogLabel=tk.Label(loginFrame,text="Fill in the fields below to Login \n or Register a new account",bg='white')
191 | helplogLabel.grid(row=2,column=1,columnspan=5)
192 | usernameLabel=tk.Label(loginFrame,text="Input Username: ",fg="black",font=labelFont,bg='white')
193 | usernameLabel.grid(row=3,column=1)
194 | passwordLabel=tk.Label(loginFrame,text="Input Password: ",fg="black",font=labelFont,bg='white')
195 | passwordLabel.grid(row=4,column=1)
196 | #Entry
197 | usernameEntry=tk.Entry(loginFrame,textvariable=inputedUsername,font=labelFont)
198 | usernameEntry.grid(row=3,column=2,columnspan=2)
199 | passwordEntry=tk.Entry(loginFrame,textvariable=inputedPassword,font=labelFont,show='*')
200 | passwordEntry.grid(row=4,column=2,columnspan=2)
201 | #Buttons
202 | loginButton=tk.Button(loginFrame,command=login,font=buttonFont,text='Login')
203 | loginButton.grid(row=5,column=2)
204 | moveToRegButton=tk.Button(loginFrame,command=moveToReg,font=buttonFont,text='Register')
205 | moveToRegButton.grid(row=5,column=1)
206 |
207 | #Register Frame Widgets
208 | titleRegLabel=tk.Label(registerFrame,text="Register",font=titleFont,fg='green',bg='white')
209 | titleRegLabel.grid(row=1,column=1,columnspan=5)
210 | helpregLabel=tk.Label(registerFrame,text="Fill in the fields below to Register",bg='white')
211 | helpregLabel.grid(row=2,column=1,columnspan=5)
212 | firstNameLabel=tk.Label(registerFrame,text="First Name: ",fg="black",font=labelFont,bg='white')
213 | firstNameLabel.grid(row=3,column=1)
214 | secondNameLabel=tk.Label(registerFrame,text="Second Name: ",fg="black",font=labelFont,bg='white')
215 | secondNameLabel.grid(row=4,column=1)
216 | genderLabel=tk.Label(registerFrame,text="Gender: ",fg="black",font=labelFont,bg='white')
217 | genderLabel.grid(row=5,column=1)
218 | stakeholderLabel=tk.Label(registerFrame,text="Stakeholder: ",fg="black",font=labelFont,bg="white")
219 | stakeholderLabel.grid(row=6,column=1)
220 | usernameRegLabel=tk.Label(registerFrame,text="Username: ",fg="black",font=labelFont,bg='white')
221 | usernameRegLabel.grid(row=7,column=1)
222 | passwordRegLabel=tk.Label(registerFrame,text="Password: ",fg="black",font=labelFont,bg='white')
223 | passwordRegLabel.grid(row=8,column=1)
224 | #Entry Widgets
225 | firstNameEntry=tk.Entry(registerFrame,textvariable=inputedFirstName,fg="black",font=labelFont,bg='white')
226 | firstNameEntry.grid(row=3,column=2)
227 | secondNameEntry=tk.Entry(registerFrame,textvariable=inputedSecondName,fg="black",font=labelFont,bg='white')
228 | secondNameEntry.grid(row=4,column=2)
229 | genderEntry = tk.OptionMenu(registerFrame,inputedGender,*genderOptions)
230 | genderEntry.grid(row=5,column=2)
231 | stakeholderEntry=tk.OptionMenu(registerFrame,inputedStakeholder,*stakeholderOptions)
232 | stakeholderEntry.grid(row=6,column=2)
233 | usernameRegEntry=tk.Entry(registerFrame,textvariable=inputedUsername,fg="black",font=labelFont,bg='white')
234 | usernameRegEntry.grid(row=7,column=2)
235 | passwordRegEntry=tk.Entry(registerFrame,textvariable=inputedPassword,fg="black",font=labelFont,bg='white',show='*')
236 | passwordRegEntry.grid(row=8,column=2)
237 |
238 | #Buttons
239 | backButton=tk.Button(registerFrame,command=moveToLog,font=buttonFont,text='Back')
240 | backButton.grid(row=9,column=1)
241 | regButton=tk.Button(registerFrame,command=register,font=buttonFont,text='Register')
242 | regButton.grid(row=9,column=2)
243 |
244 |
245 | #EmployeeMenuFrame Widgets
246 | greetingELabel=tk.Label(employeeMenuFrame,textvariable=employeeGreeting,bg="white",fg="black")
247 | greetingELabel.grid(row=1,column=1)
248 | greetingMLabel=tk.Label(managerMenuFrame,textvariable=managerGreeting,bg="white",fg="black")
249 | greetingMLabel.grid(row=1,column=1)
250 | eFName=tk.Label(managerMenuFrame,text="Employee First Name",bg='white')
251 | eFName.grid(row=2,column=1)
252 | eFNameEntry=tk.Entry(managerMenuFrame,textvariable=employeeFireFName,bg='white')
253 | eFNameEntry.grid(row=2,column=2)
254 | eSName=tk.Label(managerMenuFrame,text="Employee Second Name",bg="white")
255 | eSName.grid(row=2,column=3)
256 | eSNameEntry=tk.Entry(managerMenuFrame,textvariable=employeeFireSName)
257 | eSNameEntry.grid(row=2,column=4)
258 |
259 | deleteButton=tk.Button(managerMenuFrame,text="Fire!",bg="white",command=delete,font=labelFont)
260 | deleteButton.grid(row=3,column=1)
261 |
262 | editMenuButtonRaise=tk.Button(managerMenuFrame,text="Edit Menu",bg="white",command=editMenuRaiseFrame,font=labelFont)
263 | editMenuButtonRaise.grid(row=4,column=1)
264 |
265 | #editMenuFrame Widgets
266 | editMenuLabel=tk.Label(editMenuFrame,text="Edit Menu",font=titleFont,fg='blue',bg='white')
267 | editMenuLabel.grid(row=1,column=1,columnspan=5)
268 | editMenuChoice=tk.Label(editMenuFrame,text="Choose an Item: ",fg="black",font=labelFont,bg='white')
269 | editMenuChoice.grid(row=2,column=1)
270 | editMenuNameLabel=tk.Label(editMenuFrame,text="Menu Item Name: ",fg="black",font=labelFont,bg='white')
271 | editMenuNameLabel.grid(row=3,column=1)
272 | editMenuPriceLabel=tk.Label(editMenuFrame,text="Menu Item Price £: ",fg="black",font=labelFont,bg='white')
273 | editMenuPriceLabel.grid(row=4,column=1)
274 | editMenuPriceLabel=tk.Label(editMenuFrame,text="Tasty Scale: ",fg="black",font=labelFont,bg='white')
275 | editMenuPriceLabel.grid(row=5,column=1)
276 | editMenuNameEntry=tk.Entry(editMenuFrame,textvariable=editMenuName,font=labelFont,bg='white')
277 | editMenuNameEntry.grid(row=3,column=2)
278 | editMenuPriceEntry=tk.Entry(editMenuFrame,textvariable=editMenuPrice,font=labelFont,bg='white')
279 | editMenuPriceEntry.grid(row=4,column=2)
280 | editMenuTastyScale=tk.Scale(editMenuFrame,variable=editMenuTasty,bg='white',orient=tk.HORIZONTAL)
281 | editMenuTastyScale.grid(row=5,column=2)
282 |
283 | editMenuButton=tk.Button(editMenuFrame,font=labelFont,command=editMenu,text="Edit")
284 | editMenuButton.grid(row=6,column=1,columnspan=2)
285 | raiseFrame(loginFrame)
286 | root.mainloop()
287 |
288 |
--------------------------------------------------------------------------------
/Email with Python.py:
--------------------------------------------------------------------------------
1 | import smtplib
2 | import config
3 |
4 | def sendEmail(subject,msg,recipientemail):
5 | try:
6 | server=smtplib.SMTP('smtp.gmail.com:587')
7 | server.ehlo()
8 | server.starttls()
9 | server.login(config.emailAddress,config.password)
10 | message= 'Subject: {} \n\n {}'.format(subject,msg)
11 | server.sendmail(config.emailAddress,recipientemail,message)
12 | server.quit()
13 | print("Email Sent")
14 | except:
15 | print("Email Not Sent")
16 |
17 | subject="NEW DEAL AVAILABLE"
18 | msg="2 For 1 for all mains on our menu"
19 | recipientemailaddress="RECIPIENT EMAIL"
20 | sendEmail(subject,msg,recipientemailaddress)
--------------------------------------------------------------------------------
/Encrypt Vid (AFTER CODE).py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 | from cryptography.fernet import Fernet
4 | import mysql.connector
5 | import csv
6 | import random
7 | # Connect MySQL
8 | if True:
9 | mydb = mysql.connector.connect(
10 | host="localhost",
11 | user="root",
12 | passwd="password123",
13 | database="cafefishdb"
14 | )
15 | mycursor=mydb.cursor()
16 | #Create Table
17 | mycursor.execute("""CREATE TABLE IF NOT EXISTS usercredentials(username VARCHAR(255),password VARCHAR(255),userID int)""")
18 | mycursor.execute("""CREATE TABLE IF NOT EXISTS customer(userID int,firstname VARCHAR(255),secondname VARCHAR(255))""")
19 | #Obtaining Encryption Key
20 | #Open Text File
21 | with open("Keys.txt","r") as csvfile:
22 | reader=csv.reader(csvfile)
23 | KeyFound=0
24 | for row in reader:
25 | try:
26 | print(row[0])
27 | except IndexError:
28 | continue
29 | if len(row[0])>4:
30 | KeyFound=1
31 | Key=row[0]
32 | else:
33 | pass
34 | if KeyFound==0:
35 | Key= Fernet.generate_key()
36 | csvfile.close()
37 | if KeyFound==0:
38 | with open("Keys.txt","w") as csvfile:
39 | headers =['key']
40 | writer = csv.DictWriter(csvfile,fieldnames=headers)
41 | writer.writeheader()
42 | writer.writerow({'key': Key.decode('utf-8')})
43 | csvfile.close()
44 |
45 | print(Key)
46 | Ecy = Fernet(Key)
47 | csvfile.close()
48 |
49 | #Declare Root
50 | root = tk.Tk()
51 | root.title("Login System")
52 | #Define Frames
53 | loginFrame=tk.Frame(root)
54 | registerFrame=tk.Frame(root)
55 | customerFrame=tk.Frame(root)
56 | frameList=[loginFrame,registerFrame,customerFrame]
57 | #Configure all Frames
58 | for frame in frameList:
59 | frame.grid(row=0,column=0, sticky='news')
60 | frame.configure(bg='white')
61 | #Frame Raise Function
62 | def raiseFrame(frame):
63 | frame.tkraise()
64 | #Move To Reg Function
65 | def moveToReg():
66 | raiseFrame(registerFrame)
67 | def moveToLog():
68 | raiseFrame(loginFrame)
69 |
70 | def login():
71 | mycursor.execute("SELECT * FROM usercredentials")
72 | myresults=mycursor.fetchall()
73 | for record in myresults:
74 | b = bytes(record[1], 'utf-8')
75 | decryptedPassword=str(Ecy.decrypt(b))
76 | decryptedPassword = decryptedPassword.strip("b'")
77 | print("Password:")
78 | print(decryptedPassword)
79 | if inputedPassword.get()==decryptedPassword and inputedUsername.get()==record[0]:
80 | selectData="SELECT firstname,secondname FROM customer WHERE userID=%s"
81 | mycursor.execute(selectData,(record[2],))
82 | myresults=mycursor.fetchone()
83 | tempVar="Welcome",myresults[0],myresults[1]
84 | greetings.set(tempVar)
85 | raiseFrame(customerFrame)
86 | else:
87 | print("Not Found")
88 | pass
89 |
90 | def register():
91 | userID=random.randint(1,5000)
92 | b = bytes(inputedPassword.get(),'utf-8')
93 | encryptedPassword = Ecy.encrypt(b)
94 | userInsert="""INSERT INTO usercredentials (username,password,userID) VALUES(%s,%s,%s)"""
95 | mycursor.execute(userInsert,(inputedUsername.get(),encryptedPassword,userID))
96 | mydb.commit()
97 | custInsert="""INSERT INTO customer (userID,firstname,secondname) VALUES (%s,%s,%s)"""
98 | mycursor.execute(custInsert,(userID,inputedFirstName.get(),inputedSecondName.get()))
99 | mydb.commit()
100 | raiseFrame(loginFrame)
101 | inputedFirstName.set("")
102 | inputedSecondName.set("")
103 | inputedUsername.set("")
104 | inputedPassword.set("")
105 |
106 | #Tkinter Vars
107 | inputedUsername=tk.StringVar()
108 | inputedPassword=tk.StringVar()
109 | inputedFirstName=tk.StringVar()
110 | inputedSecondName=tk.StringVar()
111 | greetings=tk.StringVar()
112 | greetings.set("")
113 | #Fonts
114 | titleFont = Font(family="Arial", size="48")
115 | labelFont = Font(family="Arial", size="24")
116 | buttonFont =Font(family="Arial",size = "20")
117 |
118 | #Login Frame Widgets
119 | #Labels
120 | titleLabel=tk.Label(loginFrame,text="System Name",font=titleFont,fg='green',bg='white')
121 | titleLabel.grid(row=1,column=1,columnspan=5)
122 | helplogLabel=tk.Label(loginFrame,text="Fill in the fields below to Login \n or Register a new account",bg='white')
123 | helplogLabel.grid(row=2,column=1,columnspan=5)
124 | usernameLabel=tk.Label(loginFrame,text="Input Username: ",fg="black",font=labelFont,bg='white')
125 | usernameLabel.grid(row=3,column=1)
126 | passwordLabel=tk.Label(loginFrame,text="Input Password: ",fg="black",font=labelFont,bg='white')
127 | passwordLabel.grid(row=4,column=1)
128 | #Entry
129 | usernameEntry=tk.Entry(loginFrame,textvariable=inputedUsername,font=labelFont)
130 | usernameEntry.grid(row=3,column=2,columnspan=2)
131 | passwordEntry=tk.Entry(loginFrame,textvariable=inputedPassword,font=labelFont,show='*')
132 | passwordEntry.grid(row=4,column=2,columnspan=2)
133 | #Buttons
134 | loginButton=tk.Button(loginFrame,command=login,font=buttonFont,text='Login')
135 | loginButton.grid(row=5,column=2)
136 | moveToRegButton=tk.Button(loginFrame,command=moveToReg,font=buttonFont,text='Register')
137 | moveToRegButton.grid(row=5,column=1)
138 |
139 | #Register Frame Widgets
140 | titleRegLabel=tk.Label(registerFrame,text="Register",font=titleFont,fg='green',bg='white')
141 | titleRegLabel.grid(row=1,column=1,columnspan=5)
142 | helpregLabel=tk.Label(registerFrame,text="Fill in the fields below to Register",bg='white')
143 | helpregLabel.grid(row=2,column=1,columnspan=5)
144 | firstNameLabel=tk.Label(registerFrame,text="First Name: ",fg="black",font=labelFont,bg='white')
145 | firstNameLabel.grid(row=3,column=1)
146 | secondNameLabel=tk.Label(registerFrame,text="Second Name: ",fg="black",font=labelFont,bg='white')
147 | secondNameLabel.grid(row=4,column=1)
148 | usernameRegLabel=tk.Label(registerFrame,text="Username: ",fg="black",font=labelFont,bg='white')
149 | usernameRegLabel.grid(row=5,column=1)
150 | passwordRegLabel=tk.Label(registerFrame,text="Password: ",fg="black",font=labelFont,bg='white')
151 | passwordRegLabel.grid(row=6,column=1)
152 | #Entry Widgets
153 | firstNameLabel=tk.Entry(registerFrame,textvariable=inputedFirstName,fg="black",font=labelFont,bg='white')
154 | firstNameLabel.grid(row=3,column=2)
155 | secondNameLabel=tk.Entry(registerFrame,textvariable=inputedSecondName,fg="black",font=labelFont,bg='white')
156 | secondNameLabel.grid(row=4,column=2)
157 | usernameRegLabel=tk.Entry(registerFrame,textvariable=inputedUsername,fg="black",font=labelFont,bg='white')
158 | usernameRegLabel.grid(row=5,column=2)
159 | passwordRegLabel=tk.Entry(registerFrame,textvariable=inputedPassword,fg="black",font=labelFont,bg='white',show='*')
160 | passwordRegLabel.grid(row=6,column=2)
161 | #Buttons
162 | backButton=tk.Button(registerFrame,command=moveToLog,font=buttonFont,text='Back')
163 | backButton.grid(row=7,column=1)
164 | regButton=tk.Button(registerFrame,command=register,font=buttonFont,text='Register')
165 | regButton.grid(row=7,column=2)
166 |
167 | #Customer Frame Widgets
168 | titleCLabel=tk.Label(customerFrame,textvariable=greetings,font=titleFont,fg='green',bg='white')
169 | titleCLabel.grid(row=1,column=1,columnspan=5)
170 |
171 | raiseFrame(loginFrame)
172 | root.mainloop()
173 |
174 |
--------------------------------------------------------------------------------
/Encryption (BEFORE CODE).py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 | from cryptography.fernet import Fernet
4 | import mysql.connector
5 | import csv
6 | import random
7 | # Connect MySQL
8 | if True:
9 | mydb = mysql.connector.connect(
10 | host="localhost",
11 | user="root",
12 | passwd="password123",
13 | database="cafefishdb"
14 | )
15 | mycursor=mydb.cursor()
16 | #Create Table
17 | mycursor.execute("""CREATE TABLE IF NOT EXISTS usercredentials(username VARCHAR(255),password VARCHAR(255),userID int)""")
18 | mycursor.execute("""CREATE TABLE IF NOT EXISTS customer(userID int,firstname VARCHAR(255),secondname VARCHAR(255))""")
19 | #Obtaining Encryption Key
20 | #Open Text File
21 |
22 |
23 | #Declare Root
24 | root = tk.Tk()
25 | root.title("Login System")
26 | #Define Frames
27 | loginFrame=tk.Frame(root)
28 | registerFrame=tk.Frame(root)
29 | customerFrame=tk.Frame(root)
30 | frameList=[loginFrame,registerFrame,customerFrame]
31 | #Configure all Frames
32 | for frame in frameList:
33 | frame.grid(row=0,column=0, sticky='news')
34 | frame.configure(bg='white')
35 | #Frame Raise Function
36 | def raiseFrame(frame):
37 | frame.tkraise()
38 | #Move To Reg Function
39 | def moveToReg():
40 | raiseFrame(registerFrame)
41 | def moveToLog():
42 | raiseFrame(loginFrame)
43 |
44 | def login():
45 | pass
46 |
47 | def register():
48 | pass
49 | #Tkinter Vars
50 | inputedUsername=tk.StringVar()
51 | inputedPassword=tk.StringVar()
52 | inputedFirstName=tk.StringVar()
53 | inputedSecondName=tk.StringVar()
54 | greetings=tk.StringVar()
55 | greetings.set("")
56 | #Fonts
57 | titleFont = Font(family="Arial", size="48")
58 | labelFont = Font(family="Arial", size="24")
59 | buttonFont =Font(family="Arial",size = "20")
60 |
61 | #Login Frame Widgets
62 | #Labels
63 | titleLabel=tk.Label(loginFrame,text="System Name",font=titleFont,fg='green',bg='white')
64 | titleLabel.grid(row=1,column=1,columnspan=5)
65 | helplogLabel=tk.Label(loginFrame,text="Fill in the fields below to Login \n or Register a new account",bg='white')
66 | helplogLabel.grid(row=2,column=1,columnspan=5)
67 | usernameLabel=tk.Label(loginFrame,text="Input Username: ",fg="black",font=labelFont,bg='white')
68 | usernameLabel.grid(row=3,column=1)
69 | passwordLabel=tk.Label(loginFrame,text="Input Password: ",fg="black",font=labelFont,bg='white')
70 | passwordLabel.grid(row=4,column=1)
71 | #Entry
72 | usernameEntry=tk.Entry(loginFrame,textvariable=inputedUsername,font=labelFont)
73 | usernameEntry.grid(row=3,column=2,columnspan=2)
74 | passwordEntry=tk.Entry(loginFrame,textvariable=inputedPassword,font=labelFont,show='*')
75 | passwordEntry.grid(row=4,column=2,columnspan=2)
76 | #Buttons
77 | loginButton=tk.Button(loginFrame,command=login,font=buttonFont,text='Login')
78 | loginButton.grid(row=5,column=2)
79 | moveToRegButton=tk.Button(loginFrame,command=moveToReg,font=buttonFont,text='Register')
80 | moveToRegButton.grid(row=5,column=1)
81 |
82 | #Register Frame Widgets
83 | titleRegLabel=tk.Label(registerFrame,text="Register",font=titleFont,fg='green',bg='white')
84 | titleRegLabel.grid(row=1,column=1,columnspan=5)
85 | helpregLabel=tk.Label(registerFrame,text="Fill in the fields below to Register",bg='white')
86 | helpregLabel.grid(row=2,column=1,columnspan=5)
87 | firstNameLabel=tk.Label(registerFrame,text="First Name: ",fg="black",font=labelFont,bg='white')
88 | firstNameLabel.grid(row=3,column=1)
89 | secondNameLabel=tk.Label(registerFrame,text="Second Name: ",fg="black",font=labelFont,bg='white')
90 | secondNameLabel.grid(row=4,column=1)
91 | usernameRegLabel=tk.Label(registerFrame,text="Username: ",fg="black",font=labelFont,bg='white')
92 | usernameRegLabel.grid(row=5,column=1)
93 | passwordRegLabel=tk.Label(registerFrame,text="Password: ",fg="black",font=labelFont,bg='white')
94 | passwordRegLabel.grid(row=6,column=1)
95 | #Entry Widgets
96 | firstNameLabel=tk.Entry(registerFrame,textvariable=inputedFirstName,fg="black",font=labelFont,bg='white')
97 | firstNameLabel.grid(row=3,column=2)
98 | secondNameLabel=tk.Entry(registerFrame,textvariable=inputedSecondName,fg="black",font=labelFont,bg='white')
99 | secondNameLabel.grid(row=4,column=2)
100 | usernameRegLabel=tk.Entry(registerFrame,textvariable=inputedUsername,fg="black",font=labelFont,bg='white')
101 | usernameRegLabel.grid(row=5,column=2)
102 | passwordRegLabel=tk.Entry(registerFrame,textvariable=inputedPassword,fg="black",font=labelFont,bg='white',show='*')
103 | passwordRegLabel.grid(row=6,column=2)
104 | #Buttons
105 | backButton=tk.Button(registerFrame,command=moveToLog,font=buttonFont,text='Back')
106 | backButton.grid(row=7,column=1)
107 | regButton=tk.Button(registerFrame,command=register,font=buttonFont,text='Register')
108 | regButton.grid(row=7,column=2)
109 |
110 | #Customer Frame Widgets
111 | titleCLabel=tk.Label(customerFrame,textvariable=greetings,font=titleFont,fg='green',bg='white')
112 | titleCLabel.grid(row=1,column=1,columnspan=5)
113 |
114 | raiseFrame(loginFrame)
115 | root.mainloop()
116 |
117 |
--------------------------------------------------------------------------------
/Excel/reader.py:
--------------------------------------------------------------------------------
1 | import openpyxl
2 | from pathlib import Path
3 | xlsxFile = Path('','Customers.xlsx')
4 | workbook = openpyxl.load_workbook(xlsxFile)
5 | sheet = workbook.active
6 |
7 | data = {}
8 |
9 | for i, row in enumerate(sheet.iter_rows(values_only=True)):
10 | if i == 0:
11 | data[row[0]] = []
12 | data[row[1]] = []
13 | data[row[2]] = []
14 | data[row[3]] = []
15 | data[row[4]] = []
16 | else:
17 | data['id'].append(row[0])
18 | data['company'].append(row[1])
19 | data['last_name'].append(row[2])
20 | data['first_name'].append(row[3])
21 | data['job_title'].append(row[4])
22 |
23 | print(data)
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Excel/writer.py:
--------------------------------------------------------------------------------
1 | import mysql.connector
2 | import config
3 | import xlsxwriter
4 | import os
5 | mydb = mysql.connector.connect(
6 | host="localhost",
7 | user="root",
8 | passwd=config.dbpass,
9 | database="northwind"
10 | )
11 | mycursor = mydb.cursor()
12 | mycursor.execute("SELECT id, company, last_name, first_name, job_title FROM customers")
13 | myresults = mycursor.fetchall()
14 |
15 | workbook = xlsxwriter.Workbook("Customers.xlsx")
16 | bold = workbook.add_format({'bold': True})
17 |
18 | customerworksheet = workbook.add_worksheet("Customers")
19 |
20 | colNum=0
21 |
22 | for fieldname in ['id','company','last_name','first_name','job_title']:
23 | customerworksheet.write(0,colNum,fieldname,bold)
24 | colNum+=1
25 |
26 | rowNum=1
27 | colNum=0
28 | for id,company,last_name,first_name,job_title in myresults:
29 | customerworksheet.write(rowNum,colNum,id)
30 | colNum+=1
31 | customerworksheet.write(rowNum, colNum, company)
32 | colNum += 1
33 | customerworksheet.write(rowNum, colNum, last_name)
34 | colNum += 1
35 | customerworksheet.write(rowNum, colNum, first_name)
36 | colNum += 1
37 | customerworksheet.write(rowNum, colNum, job_title)
38 | rowNum+=1
39 | colNum=0
40 |
41 |
42 | workbook.close()
43 | os.startfile("Customers.xlsx")
44 |
--------------------------------------------------------------------------------
/Face Recognition/facereco.py:
--------------------------------------------------------------------------------
1 | import face_recognition
2 | import cv2
3 | import pickle
4 | import os
5 | import numpy as np
6 |
7 | import tkinter as tk
8 | from tkinter import messagebox
9 |
10 | from pathlib import Path
11 | import glob
12 |
13 |
14 | #class: Dlib Face Unlock
15 | #Purpose: This class will update the encoded known face if the directory has changed
16 | #as well as encoding a face from a live feed to compare the face to allow the facial recognition
17 | #to be integrated into the system
18 | #Methods: ID
19 | class Dlib_Face_Unlock:
20 | #When the Dlib Face Unlock Class is first initialised it will check if the employee photos directory has been updated
21 | #if an update has occurred either someone deleting their face from the system or someone adding their face to the system
22 | #the face will then be encoded and saved to the encoded pickle file
23 | def __init__(self):
24 | #this is to detect if the directory is found or not
25 | try:
26 | #this will open the existing pickle file to load in the encoded faces of the users who has sign up for the service
27 | with open (r'C:\Users\barry\PycharmProjects\face_rec\labels.pickle','rb') as self.f:
28 | self.og_labels = pickle.load(self.f)
29 | print(self.og_labels)
30 | #error checking
31 | except FileNotFoundError:
32 | #allowing me to known that their was no file found
33 | print("No label.pickle file detected, will create required pickle files")
34 |
35 | #this will be used to for selecting the photos
36 | self.current_id = 0
37 | #creating a blank ids dictionary
38 | self.labels_ids = {}
39 | #this is the directory where all the users are stored
40 | self.BASE_DIR = os.path.dirname(os.path.abspath(__file__))
41 | self.image_dir = os.path.join(self.BASE_DIR, 'images')
42 | for self.root, self.dirs, self.files in os.walk(self.image_dir):
43 | #checking each folder in the images directory
44 | for self.file in self.files:
45 | #looking for any png or jpg files of the users
46 | if self.file.endswith('png') or self.file.endswith('jpg'):
47 | #getting the folder name, as the name of the folder will be the user
48 | self.path = os.path.join(self.root, self.file)
49 | self.label = os.path.basename(os.path.dirname(self.path)).replace(' ','-').lower()
50 | if not self.label in self.labels_ids:
51 | #adding the user into the labels_id dictionary
52 | self.labels_ids[self.label] = self.current_id
53 | self.current_id += 1
54 | self.id = self.labels_ids[self.label]
55 |
56 | print(self.labels_ids)
57 | #this is compare the new label ids to the old label ids dictionary seeing if their has been any new users or old users
58 | #being added to the system, if there is no change then nothing will happen
59 | self.og_labels=0
60 | if self.labels_ids != self.og_labels:
61 | #if the dictionary change then the new dictionary will be dump into the pickle file
62 | with open('labels.pickle','wb') as self.file:
63 | pickle.dump(self.labels_ids, self.file)
64 |
65 | self.known_faces = []
66 | for self.i in self.labels_ids:
67 | #Get number of images of a person
68 | noOfImgs = len([filename for filename in os.listdir('images/' + self.i)
69 | if os.path.isfile(os.path.join('images/' + self.i, filename))])
70 | print(noOfImgs)
71 | for imgNo in range(1,(noOfImgs+1)):
72 | self.directory = os.path.join(self.image_dir, self.i, str(imgNo)+'.png')
73 | self.img = face_recognition.load_image_file(self.directory)
74 | self.img_encoding = face_recognition.face_encodings(self.img)[0]
75 | self.known_faces.append([self.i, self.img_encoding])
76 | print(self.known_faces)
77 | print("No Of Imgs"+str(len(self.known_faces)))
78 | with open('KnownFace.pickle','wb') as self.known_faces_file:
79 | pickle.dump(self.known_faces, self.known_faces_file)
80 | else:
81 | with open (r'CC:\Users\barry\PycharmProjects\face_rec\KnownFace.pickle','rb') as self.faces_file:
82 | self.known_faces = pickle.load(self.faces_file)
83 | print(self.known_faces)
84 |
85 |
86 | #Method: ID
87 | #Purpose:This is method will be used to create a live feed .i.e turning on the devices camera
88 | #then the live feed will be used to get an image of the user and then encode the users face
89 | #once the users face has been encoded then it will be compared to in the known faces
90 | #therefore identifying the user
91 | def ID(self):
92 | #turning on the camera to get a photo of the user frame by frame
93 | self.cap = cv2.VideoCapture(0)
94 | #seting the running variable to be true to allow me to known if the face recog is running
95 | self.running = True
96 | self.face_names = []
97 | while self.running == True:
98 | #taking a photo of the frame from the camera
99 | self.ret, self.frame = self.cap.read()
100 | #resizing the frame so that the face recog module can read it
101 | self.small_frame = cv2.resize(self.frame, (0,0), fx = 0.5, fy = 0.5)
102 | #converting the image into black and white
103 | self.rgb_small_frame = self.small_frame[:, :, ::-1]
104 | if self.running:
105 | #searching the black and white image for a face
106 | self.face_locations = face_recognition.face_locations(self.frame)
107 |
108 | # if self.face_locations == []:
109 | # Dlib_Face_Unlock.ID(self)
110 | #it will then encode the face into a matrix
111 | self.face_encodings = face_recognition.face_encodings(self.frame, self.face_locations)
112 | #creating a names list to append the users identify into
113 | self.face_names = []
114 | #looping through the face_encoding that the system made
115 | for self.face_encoding in self.face_encodings:
116 | #looping though the known_faces dictionary
117 | for self.face in self.known_faces:
118 | #using the compare face method in the face recognition module
119 | self.matches = face_recognition.compare_faces([self.face[1]], self.face_encoding)
120 | print(self.matches)
121 | self.name = 'Unknown'
122 | #compare the distances of the encoded faces
123 | self.face_distances = face_recognition.face_distance([self.face[1]], self.face_encoding)
124 | #uses the numpy module to comare the distance to get the best match
125 | self.best_match = np.argmin(self.face_distances)
126 | print(self.best_match)
127 | print('This is the match in best match',self.matches[self.best_match])
128 | if self.matches[self.best_match] == True:
129 | self.running = False
130 | self.face_names.append(self.face[0])
131 | break
132 | next
133 | print("The best match(es) is"+str(self.face_names))
134 | self.cap.release()
135 | cv2.destroyAllWindows()
136 | break
137 | return self.face_names
138 | """
139 | dfu = Dlib_Face_Unlock()
140 | dfu.ID()
141 | """
142 | def register():
143 | #Create images folder
144 | if not os.path.exists("images"):
145 | os.makedirs("images")
146 | #Create folder of person (IF NOT EXISTS) in the images folder
147 | Path("images/"+name.get()).mkdir(parents=True, exist_ok=True)
148 | #Obtain the number of photos already in the folder
149 | numberOfFile = len([filename for filename in os.listdir('images/' + name.get())
150 | if os.path.isfile(os.path.join('images/' + name.get(), filename))])
151 | #Add 1 because we start at 1
152 | numberOfFile+=1
153 | #Take a photo code
154 | cam = cv2.VideoCapture(0)
155 |
156 | cv2.namedWindow("test")
157 |
158 |
159 | while True:
160 | ret, frame = cam.read()
161 | cv2.imshow("test", frame)
162 | if not ret:
163 | break
164 | k = cv2.waitKey(1)
165 |
166 | if k % 256 == 27:
167 | # ESC pressed
168 | print("Escape hit, closing...")
169 | cam.release()
170 | cv2.destroyAllWindows()
171 | break
172 | elif k % 256 == 32:
173 | # SPACE pressed
174 | img_name = str(numberOfFile)+".png"
175 | cv2.imwrite(img_name, frame)
176 | print("{} written!".format(img_name))
177 | os.replace(str(numberOfFile)+".png", "images/"+name.get().lower()+"/"+str(numberOfFile)+".png")
178 | cam.release()
179 | cv2.destroyAllWindows()
180 | break
181 | raiseFrame(loginFrame)
182 |
183 | #Passing in the model
184 | def login():
185 | # After someone has registered, the face scanner needs to load again with the new face
186 | dfu = Dlib_Face_Unlock()
187 | #Will return the user's name as a list, will return an empty list if no matches
188 | user = dfu.ID()
189 | if user ==[]:
190 | messagebox.showerror("Alert","Face Not Recognised")
191 | return
192 | loggedInUser.set(user[0])
193 | raiseFrame(userMenuFrame)
194 |
195 |
196 |
197 |
198 |
199 | #Tkinter
200 | root = tk.Tk()
201 | root.title("Face Login Example")
202 | #Frames
203 | loginFrame=tk.Frame(root)
204 | regFrame=tk.Frame(root)
205 | userMenuFrame = tk.Frame(root)
206 |
207 | #Define Frame List
208 | frameList=[loginFrame,regFrame,userMenuFrame]
209 | #Configure all Frames
210 | for frame in frameList:
211 | frame.grid(row=0,column=0, sticky='news')
212 | frame.configure(bg='white')
213 |
214 | def raiseFrame(frame):
215 | frame.tkraise()
216 |
217 | def regFrameRaiseFrame():
218 | raiseFrame(regFrame)
219 | def logFrameRaiseFrame():
220 | raiseFrame(loginFrame)
221 | #Tkinter Vars
222 | #Stores user's name when registering
223 | name = tk.StringVar()
224 | #Stores user's name when they have logged in
225 | loggedInUser = tk.StringVar()
226 |
227 |
228 | tk.Label(loginFrame,text="Face Recognition",font=("Courier", 60),bg="white").grid(row=1,column=1,columnspan=5)
229 | loginButton = tk.Button(loginFrame,text="Login",bg="white",font=("Arial", 30),command=login)
230 | loginButton.grid(row=2,column=5)
231 | regButton = tk.Button(loginFrame,text="Register",command=regFrameRaiseFrame,bg="white",font=("Arial", 30))
232 | regButton.grid(row=2,column=1)
233 |
234 | tk.Label(regFrame,text="Register",font=("Courier",60),bg="white").grid(row=1,column=1,columnspan=5)
235 | tk.Label(regFrame,text="Name: ",font=("Arial",30),bg="white").grid(row=2,column=1)
236 | nameEntry=tk.Entry(regFrame,textvariable=name,font=("Arial",30)).grid(row=2,column=2)
237 |
238 | registerButton = tk.Button(regFrame,text="Register",command=register,bg="white",font=("Arial", 30))
239 | registerButton.grid(row=3,column=2)
240 |
241 | tk.Label(userMenuFrame,text="Hello, ",font=("Courier",60),bg="white").grid(row=1,column=1)
242 | tk.Label(userMenuFrame,textvariable=loggedInUser,font=("Courier",60),bg="white",fg="red").grid(row=1,column=2)
243 | tk.Button(userMenuFrame,text="Back",font=("Arial", 30),command=logFrameRaiseFrame).grid(row=2,column=1)
244 |
245 |
246 | #Load Faces
247 | dfu = Dlib_Face_Unlock()
248 | raiseFrame(loginFrame)
249 | root.mainloop()
250 |
251 |
252 |
253 |
254 |
255 |
256 |
--------------------------------------------------------------------------------
/FlaskUpload/Main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import urllib.request
3 | from app import app
4 | from flask import Flask, flash, request, redirect, render_template
5 | from werkzeug.utils import secure_filename
6 |
7 | ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'py', 'docx'])
8 |
9 |
10 | def allowed_file(filename):
11 | return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
12 |
13 |
14 | @app.route('/')
15 | def upload_form():
16 | return render_template("upload.html")
17 |
18 |
19 | @app.route('/', methods=['POST'])
20 | def upload_file():
21 | if request.method == 'POST':
22 | # check if the post request has the file part
23 | if 'file' not in request.files:
24 | flash('No file part')
25 | return redirect(request.url)
26 | file = request.files['file']
27 | if file.filename == '':
28 | flash('No file selected for uploading')
29 | return redirect(request.url)
30 | if file and allowed_file(file.filename):
31 | filename = secure_filename(file.filename)
32 | file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
33 | flash('File successfully uploaded')
34 | return redirect('/')
35 | else:
36 | flash('Allowed file types are txt, pdf, png, jpg, jpeg, gif, py, docx')
37 | return redirect(request.url)
38 |
39 |
40 | if __name__ == "__main__":
41 | app.run(debug=True,host= '192.168.1.222',port=5000)
42 |
--------------------------------------------------------------------------------
/FlaskUpload/SimpleInterface.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | import webbrowser
3 | import os
4 | root = tk.Tk()
5 | root.title("Interface")
6 | uploaderFrame = tk.Frame(root)
7 | downloaderFrame = tk.Frame(root)
8 | frameList=[uploaderFrame,downloaderFrame]
9 | for frame in frameList:
10 | frame.grid(row=0,column=0, sticky='news')
11 |
12 | frame.configure(bg='white')
13 | def raiseFrame(frame):
14 | frame.tkraise()
15 | def goToUpload():
16 | raiseFrame(uploaderFrame)
17 | def goToUploadSite():
18 | webbrowser.open("http://192.168.1.222:5000/")
19 | def goToDownloader():
20 | filenames= os.listdir("C:\\Users\\barry\\PycharmProjects\\ProjectVideos\\FlaskWebServers\\uploads")
21 | rowNum= 3
22 | for filename in filenames:
23 | tk.Label(downloaderFrame,text=filename,font=("Arial",40),bg="white").grid(row=rowNum,column=1,columnspan=5)
24 | rowNum+=1
25 | raiseFrame(downloaderFrame)
26 |
27 | tk.Label(uploaderFrame,text="Uploader",font=("Arial",70),bg="white").grid(row=1,column=1,columnspan=5)
28 | tk.Button(uploaderFrame,text="Upload File",font=("Arial",40),bg="white",command=goToUploadSite).grid(row=2,column=1)
29 | tk.Button(uploaderFrame,text="Switch User",font=("Arial",40),bg="white",command=goToDownloader).grid(row=2,column=2)
30 |
31 | tk.Label(downloaderFrame,text="Downloader",font=("Arial",70),bg="white").grid(row=1,column=1,columnspan=5)
32 | tk.Label(downloaderFrame,text="All files in downloads folder:",font=("Arial",40),bg="white").grid(row=2,column=1,columnspan=5)
33 | tk.Button(downloaderFrame,text="Switch User",font=("Arial",40),bg="white",command=goToUpload).grid(row=2,column=6)
34 |
35 |
36 |
37 | raiseFrame(uploaderFrame)
38 | root.mainloop()
--------------------------------------------------------------------------------
/FlaskUpload/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 |
3 | #this is where you will be uploading the file to
4 | UPLOAD_FOLDER = "C:\\Users\\barry\\PycharmProjects\\ProjectVideos\\FlaskWebServers\\uploads"
5 |
6 | app = Flask(__name__)
7 | app.secret_key = "secret key"
8 | app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
9 | app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
--------------------------------------------------------------------------------
/FlaskUpload/templates/upload.html:
--------------------------------------------------------------------------------
1 |
2 | Python Flask File Upload Example
3 | Select a file to upload
4 |
5 | {% with messages = get_flashed_messages() %}
6 | {% if messages %}
7 |
8 | {% for message in messages %}
9 | - {{ message }}
10 | {% endfor %}
11 |
12 | {% endif %}
13 | {% endwith %}
14 |
15 |
--------------------------------------------------------------------------------
/Frames/Simple GUI Menu.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 |
4 | root = tk.Tk()
5 | root.title("Basic Interface")
6 | root.configure(bg="white")
7 | interface=tk.Frame(root)
8 | signUp=tk.Frame(root)
9 | menu=tk.Frame(root)
10 | frameList=[interface,signUp]
11 | for frame in frameList:
12 | frame.configure(bg="white")
13 | frame.grid(row=1,column=1,sticky="news")
14 |
15 | menu.configure(bg="grey")
16 | menu.grid(row=1,column=0)
17 |
18 | interface.tkraise()
19 | def raiseFrame(frame):
20 | frame.tkraise()
21 | #Tkinter Variables
22 | inputedData= tk.StringVar()
23 | outputData= tk.StringVar()
24 | #Define Functions
25 | def Process():
26 | getData=inputedData.get()
27 | print(getData)
28 | outputData.set(getData)
29 |
30 | def goToSignup():
31 | raiseFrame(signUp)
32 |
33 | def goToProcess():
34 | raiseFrame(interface)
35 |
36 |
37 | #Fonts
38 | titleFont = Font(family="Arial", size="48")
39 | labelFont = Font(family="Arial", size="24")
40 | buttonFont = Font(family="Arial",size = "20")
41 | #Labels
42 | titleLabel=tk.Label(interface,text="Interface Title",fg="black",font=titleFont,bg='white')
43 | titleLabel.grid(row=1,column=1,columnspan=5)
44 | inputLabel=tk.Label(interface,text="Input Data: ",fg="black",font=labelFont,bg='white')
45 | inputLabel.grid(row=2,column=1)
46 | oLabel=tk.Label(interface,text="Output Data: ",fg="black",font=labelFont,bg='white')
47 | oLabel.grid(row=3,column=1)
48 | outputLabel=tk.Label(interface,textvariable=outputData,fg="black",font=labelFont,bg='white')
49 | outputLabel.grid(row=3,column=2)
50 | #Entry Boxes
51 | FirstEntry=tk.Entry(interface,textvariable=inputedData,font=labelFont)
52 | FirstEntry.grid(row=2,column=2,columnspan=2)
53 |
54 | #Buttons
55 | processButton=tk.Button(interface,text="Process",command=Process,fg="black",font=buttonFont,bg='white')
56 | processButton.grid(row=4,column=2)
57 |
58 | #Signup Menu
59 | tk.Label(signUp,text="Sign up",fg="black",font=titleFont,bg="white").grid(row=1,column=1,columnspan=5)
60 | tk.Label(signUp,text="Username",fg="black",font=buttonFont,bg="white").grid(row=2,column=1)
61 | tk.Entry(signUp,font=labelFont,bg="white").grid(row=2,column=2)
62 |
63 | #Time
64 | timeSelectFrame = tk.Frame(signUp,borderwidth=5,bg="lightblue")
65 | timeSelectFrame.grid(row=1,column=7)
66 | tk.Spinbox(timeSelectFrame,from_=1, to=24,bg="lightblue",width=2).grid(row=1,column=1)
67 | tk.Label(timeSelectFrame,text=":",bg="lightblue").grid(row=1,column=2)
68 | tk.Spinbox(timeSelectFrame,values=(0,15,30,45),bg="lightblue",width=2).grid(row=1,column=3)
69 | #13:00
70 |
71 | #Nav Menu
72 | tk.Label(menu,text="Navigation",fg="black",bg="grey",font=titleFont).grid(row=1,column=1,columnspan=3)
73 | tk.Button(menu,text="Process",fg="black",font=buttonFont,bg="grey",command=goToProcess).grid(row=2,column=1)
74 | tk.Button(menu,text="Sign Up",fg="black",font=buttonFont,bg="grey",command=goToSignup).grid(row=3,column=1)
75 | root.mainloop()
--------------------------------------------------------------------------------
/Image Button/Image Button Code.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 | from cryptography.fernet import Fernet
4 | import mysql.connector
5 | import csv
6 | import random
7 | from PIL import Image,ImageTk
8 |
9 | # Connect MySQL
10 | if True:
11 | mydb = mysql.connector.connect(
12 | host="localhost",
13 | user="root",
14 | passwd="password123",
15 | database="cafefishdb"
16 | )
17 | mycursor = mydb.cursor()
18 | # Create Table
19 | mycursor.execute(
20 | """CREATE TABLE IF NOT EXISTS usercredentials(username VARCHAR(255),password VARCHAR(255),userID int)""")
21 | mycursor.execute("""CREATE TABLE IF NOT EXISTS customer(userID int,firstname VARCHAR(255),secondname VARCHAR(255))""")
22 | # Obtaining Encryption Key
23 | # Open Text File
24 | with open("Keys.txt", "r") as csvfile:
25 | reader = csv.reader(csvfile)
26 | KeyFound = 0
27 | for row in reader:
28 | try:
29 | print(row[0])
30 | except IndexError:
31 | continue
32 | if len(row[0]) > 4:
33 | KeyFound = 1
34 | Key = row[0]
35 | else:
36 | pass
37 | if KeyFound == 0:
38 | Key = Fernet.generate_key()
39 | csvfile.close()
40 | if KeyFound == 0:
41 | with open("Keys.txt", "w") as csvfile:
42 | headers = ['key']
43 | writer = csv.DictWriter(csvfile, fieldnames=headers)
44 | writer.writeheader()
45 | writer.writerow({'key': Key.decode('utf-8')})
46 | csvfile.close()
47 |
48 | Ecy = Fernet(Key)
49 | csvfile.close()
50 |
51 | # Declare Root
52 | root = tk.Tk()
53 | root.title("Login System")
54 | # Define Frames
55 | loginFrame = tk.Frame(root)
56 | registerFrame = tk.Frame(root)
57 | customerFrame = tk.Frame(root)
58 | frameList = [loginFrame, registerFrame, customerFrame]
59 | # Configure all Frames
60 | for frame in frameList:
61 | frame.grid(row=0, column=0, sticky='news')
62 | frame.configure(bg='white')
63 |
64 |
65 | # Frame Raise Function
66 | def raiseFrame(frame):
67 | frame.tkraise()
68 |
69 |
70 | # Move To Reg Function
71 | def moveToReg():
72 | raiseFrame(registerFrame)
73 |
74 |
75 | def moveToLog():
76 | raiseFrame(loginFrame)
77 |
78 |
79 | def login():
80 | print("Login Function")
81 | mycursor.execute("SELECT * FROM usercredentials")
82 | myresults = mycursor.fetchall()
83 | for record in myresults:
84 | b = bytes(record[1], 'utf-8')
85 | decryptedPassword = str(Ecy.decrypt(b))
86 | decryptedPassword = decryptedPassword.strip("b'")
87 | print("Password:")
88 | print(decryptedPassword)
89 | if inputedPassword.get() == decryptedPassword and inputedUsername.get() == record[0]:
90 | selectData = "SELECT firstname,secondname FROM customer WHERE userID=%s"
91 | mycursor.execute(selectData, (record[2],))
92 | myresults = mycursor.fetchone()
93 | tempVar = "Welcome", myresults[0], myresults[1]
94 | greetings.set(tempVar)
95 | raiseFrame(customerFrame)
96 | else:
97 | print("Not Found")
98 | pass
99 |
100 | def register():
101 | userID = random.randint(1, 5000)
102 | b = bytes(inputedPassword.get(), 'utf-8')
103 | encryptedPassword = Ecy.encrypt(b)
104 | userInsert = """INSERT INTO usercredentials (username,password,userID) VALUES(%s,%s,%s)"""
105 | mycursor.execute(userInsert, (inputedUsername.get(), encryptedPassword, userID))
106 | mydb.commit()
107 | custInsert = """INSERT INTO customer (userID,firstname,secondname) VALUES (%s,%s,%s)"""
108 | mycursor.execute(custInsert, (userID, inputedFirstName.get(), inputedSecondName.get()))
109 | mydb.commit()
110 | raiseFrame(loginFrame)
111 | inputedFirstName.set("")
112 | inputedSecondName.set("")
113 | inputedUsername.set("")
114 | inputedPassword.set("")
115 |
116 |
117 | # Tkinter Vars
118 | inputedUsername = tk.StringVar()
119 | inputedPassword = tk.StringVar()
120 | inputedFirstName = tk.StringVar()
121 | inputedSecondName = tk.StringVar()
122 | greetings = tk.StringVar()
123 | greetings.set("")
124 | # Fonts
125 | titleFont = Font(family="Arial", size="48")
126 | labelFont = Font(family="Arial", size="24")
127 | buttonFont = Font(family="Arial", size="20")
128 |
129 | #Define Image
130 | loginbuttonimage=Image.open("Login-Icon.png")
131 | loginbuttonimageph=ImageTk.PhotoImage(loginbuttonimage)
132 |
133 |
134 |
135 | # Login Frame Widgets
136 | # Labels
137 | titleLabel = tk.Label(loginFrame, text="System Name", font=titleFont, fg='green', bg='white')
138 | titleLabel.grid(row=1, column=1, columnspan=5)
139 | helplogLabel = tk.Label(loginFrame, text="Fill in the fields below to Login \n or Register a new account", bg='white')
140 | helplogLabel.grid(row=2, column=1, columnspan=5)
141 | usernameLabel = tk.Label(loginFrame, text="Input Username: ", fg="black", font=labelFont, bg='white')
142 | usernameLabel.grid(row=3, column=1)
143 | passwordLabel = tk.Label(loginFrame, text="Input Password: ", fg="black", font=labelFont, bg='white')
144 | passwordLabel.grid(row=4, column=1)
145 | # Entry
146 | usernameEntry = tk.Entry(loginFrame, textvariable=inputedUsername, font=labelFont)
147 | usernameEntry.grid(row=3, column=2, columnspan=2)
148 | passwordEntry = tk.Entry(loginFrame, textvariable=inputedPassword, font=labelFont, show='*')
149 | passwordEntry.grid(row=4, column=2, columnspan=2)
150 | # Buttons
151 | loginButton = tk.Button(loginFrame, command=login,image=loginbuttonimageph)
152 | loginButton.image=loginbuttonimageph
153 | loginButton.grid(row=5, column=2)
154 |
155 | moveToRegButton = tk.Button(loginFrame, command=moveToReg, font=buttonFont, text='Register')
156 | moveToRegButton.grid(row=5, column=1)
157 |
158 | # Register Frame Widgets
159 | titleRegLabel = tk.Label(registerFrame, text="Register", font=titleFont, fg='green', bg='white')
160 | titleRegLabel.grid(row=1, column=1, columnspan=5)
161 | helpregLabel = tk.Label(registerFrame, text="Fill in the fields below to Register", bg='white')
162 | helpregLabel.grid(row=2, column=1, columnspan=5)
163 | firstNameLabel = tk.Label(registerFrame, text="First Name: ", fg="black", font=labelFont, bg='white')
164 | firstNameLabel.grid(row=3, column=1)
165 | secondNameLabel = tk.Label(registerFrame, text="Second Name: ", fg="black", font=labelFont, bg='white')
166 | secondNameLabel.grid(row=4, column=1)
167 | usernameRegLabel = tk.Label(registerFrame, text="Username: ", fg="black", font=labelFont, bg='white')
168 | usernameRegLabel.grid(row=5, column=1)
169 | passwordRegLabel = tk.Label(registerFrame, text="Password: ", fg="black", font=labelFont, bg='white')
170 | passwordRegLabel.grid(row=6, column=1)
171 | # Entry Widgets
172 | firstNameLabel = tk.Entry(registerFrame, textvariable=inputedFirstName, fg="black", font=labelFont, bg='white')
173 | firstNameLabel.grid(row=3, column=2)
174 | secondNameLabel = tk.Entry(registerFrame, textvariable=inputedSecondName, fg="black", font=labelFont, bg='white')
175 | secondNameLabel.grid(row=4, column=2)
176 | usernameRegLabel = tk.Entry(registerFrame, textvariable=inputedUsername, fg="black", font=labelFont, bg='white')
177 | usernameRegLabel.grid(row=5, column=2)
178 | passwordRegLabel = tk.Entry(registerFrame, textvariable=inputedPassword, fg="black", font=labelFont, bg='white',
179 | show='*')
180 | passwordRegLabel.grid(row=6, column=2)
181 | # Buttons
182 | backButton = tk.Button(registerFrame, command=moveToLog, font=buttonFont, text='Back')
183 | backButton.grid(row=7, column=1)
184 | regButton = tk.Button(registerFrame, command=register, font=buttonFont, text='Register')
185 | regButton.grid(row=7, column=2)
186 |
187 | # Customer Frame Widgets
188 | titleCLabel = tk.Label(customerFrame, textvariable=greetings, font=titleFont, fg='green', bg='white')
189 | titleCLabel.grid(row=1, column=1, columnspan=5)
190 |
191 | raiseFrame(loginFrame)
192 | root.mainloop()
193 |
194 |
--------------------------------------------------------------------------------
/Image Button/Keys.txt:
--------------------------------------------------------------------------------
1 | key
2 | aubCZiE_XNC3mUOnqIwMhSS0Q4CG0V7tQhGoRmeZP9Y=
3 |
--------------------------------------------------------------------------------
/Image Button/Login-Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Image Button/Login-Icon.png
--------------------------------------------------------------------------------
/Keybinds/Keybinds Cheat Sheet.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Keybinds/Keybinds Cheat Sheet.docx
--------------------------------------------------------------------------------
/Keybinds/Keybinds.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 |
4 | root = tk.Tk()
5 | root.title("Basic Interface")
6 | interface=tk.Frame(root)
7 | interface.configure(bg='white')
8 | interface.grid(row=0, column=0,sticky='news')
9 | interface.tkraise()
10 | #Tkinter Variables
11 | inputedData= tk.StringVar()
12 | outputData= tk.StringVar()
13 | #Define Functions
14 | def Process(event):
15 | getData=inputedData.get()
16 | print(getData)
17 | outputData.set(getData)
18 |
19 | print(event.time)
20 | print(event.char)
21 | print(event.type)
22 | print(event.widget)
23 | print(event.x)
24 | print(event.y)
25 |
26 | def ColorChange(event):
27 | if str(event.type) == "Enter":
28 | FirstEntry.configure(bg="lightblue")
29 | elif str(event.type) == "Leave":
30 | FirstEntry.configure(bg="white")
31 | else:
32 | pass
33 |
34 |
35 | #Fonts
36 | titleFont = Font(family="Arial", size="48")
37 | labelFont = Font(family="Arial", size="24")
38 | buttonFont = Font(family="Arial",size = "20")
39 | #Labels
40 | titleLabel=tk.Label(interface,text="Interface Title",fg="black",font=titleFont,bg='white')
41 | titleLabel.grid(row=1,column=1,columnspan=5)
42 | inputLabel=tk.Label(interface,text="Input Data: ",fg="black",font=labelFont,bg='white')
43 | inputLabel.grid(row=2,column=1)
44 | oLabel=tk.Label(interface,text="Output Data: ",fg="black",font=labelFont,bg='white')
45 | oLabel.grid(row=3,column=1)
46 | outputLabel=tk.Label(interface,textvariable=outputData,fg="black",font=labelFont,bg='white')
47 | outputLabel.grid(row=3,column=2)
48 | #Entry Boxes
49 | FirstEntry=tk.Entry(interface,textvariable=inputedData,font=labelFont)
50 | FirstEntry.grid(row=2,column=2,columnspan=2)
51 | FirstEntry.bind("",ColorChange)
52 | FirstEntry.bind("",ColorChange)
53 |
54 | #Buttons
55 | processButton=tk.Button(interface,text="Process",fg="black",font=buttonFont,bg='white')
56 | processButton.bind("",Process)
57 | processButton.grid(row=4,column=2)
58 | root.mainloop()
59 |
--------------------------------------------------------------------------------
/Line Graph (With Legend).py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | days=[1,2,3,4,5,6,7,8,9,10]
3 | noOfJFans=[300,500,550,800,600,700,850,600,450,300]
4 | noOfBFans=[500,700,900,600,300,150,450,550,600,800]
5 | plt.plot(days,noOfJFans,color="r",label="Jim's Fans")
6 | plt.plot(days,noOfBFans,color="b",label="Ben's Fans")
7 | plt.title("Social Networking")
8 | plt.xlabel("Day")
9 | plt.ylabel("Number of Fans")
10 | plt.legend()
11 | plt.savefig("Social Networking Line Graph")
12 | plt.show()
13 | plt.clf()
--------------------------------------------------------------------------------
/Line Graph.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | days=[1,2,3,4,5,6,7,8,9,10]
3 | noOfJFans=[300,500,550,800,600,700,850,600,450,300]
4 | noOfBFans=[500,700,900,600,300,150,450,550,600,800]
5 | plt.plot(days,noOfJFans,color="r")
6 | plt.plot(days,noOfBFans,color="b")
7 | plt.title("Social Networking")
8 | plt.xlabel("Day")
9 | plt.ylabel("Number of Fans")
10 | plt.savefig("Social Networking Line Graph")
11 | plt.show()
12 | plt.clf()
--------------------------------------------------------------------------------
/Networking/PyShark/BarChartMaker.py:
--------------------------------------------------------------------------------
1 | import pyshark
2 | import collections
3 | import matplotlib.pyplot as plt
4 | import numpy as np
5 |
6 | cap = pyshark.FileCapture('sample3.pcap',only_summaries=True)
7 | protocolList=[]
8 | for packet in cap:
9 | line = str(packet)
10 | formattedLine= line.split(" ")
11 | protocolList.append(formattedLine[4])
12 | counter = collections.Counter(protocolList)
13 |
14 | plt.style.use('ggplot')
15 | y_pos = np.arange(len(list(counter.keys())))
16 | plt.bar(y_pos,list(counter.values()),align='center',alpha=0.5,color=['b','g','r','c','m'])
17 | plt.xticks(y_pos,list(counter.keys()))
18 | plt.ylabel("Frequency")
19 | plt.xlabel("Protocol Name")
20 | plt.savefig("ProtocolGraph.png")
--------------------------------------------------------------------------------
/Pie Chart.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | labels=["Full meal","Hot snack","Cold snack","Packed lunch"]
3 | choiceData=[200,290,260,150]
4 | colors=['b','g','r','m']
5 | explode=[0.1,0,0,0.3]
6 | plt.pie(choiceData,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=140,explode=explode)
7 | plt.title("School Lunch Choice Pie Chart")
8 | plt.axis('equal')
9 | plt.savefig("School Lunch Pie Chart")
10 | plt.show()
11 | plt.clf()
12 |
--------------------------------------------------------------------------------
/Placeholder/Links.txt:
--------------------------------------------------------------------------------
1 | https://wiki.tcl-lang.org/page/List+of+ttk+Themes
2 | https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/entry-validation.html
--------------------------------------------------------------------------------
/Placeholder/placeholder.py:
--------------------------------------------------------------------------------
1 | from tkinter import *
2 | from tkinter import *
3 | from tkinter import ttk
4 | from ttkthemes import ThemedTk
5 |
6 | root = ThemedTk(theme="equilux")
7 | root.title("PlaceHolder Tutorial")
8 |
9 | style = ttk.Style(root)
10 |
11 | testframe = ttk.Frame(root)
12 | testframe.grid(row = 0, column = 0, sticky = "news")
13 |
14 | class PlaceholderEntry(ttk.Entry):
15 | def __init__(self, container, placeholder,validation, *args, **kwargs):
16 | super().__init__(container, *args, style="Placeholder.TEntry", **kwargs)
17 | self.placeholder = placeholder
18 | self.validation = validation
19 |
20 | self.insert("0", self.placeholder)
21 | self.configure(validate="key", validatecommand=(charactervalidation, "%P"))
22 | self.bind("", self._clear_placeholder)
23 | self.bind("", self._add_placeholder,)
24 |
25 |
26 | def _clear_placeholder(self, e):
27 | if self["style"] == "Placeholder.TEntry":
28 | self.delete("0", "end")
29 | self.addvalidation()
30 | self["style"] = "TEntry"
31 |
32 | def _add_placeholder(self, e):
33 | if not self.get():
34 | self.removevalidation()
35 | self.insert("0", self.placeholder)
36 | self["style"] = "Placeholder.TEntry"
37 |
38 | def removevalidation(self):
39 | if self.validation == "character":
40 | self.configure(validate = "none", validatecommand = (charactervalidation, "%P"))
41 | if self.validation == "none":
42 | self.configure(validate="none", validatecommand=(charactervalidation, "%P"))
43 | if self.validation == "time":
44 | self.configure(validate="none", validatecommand=(timevalidation, "%P"))
45 | if self.validation == "number":
46 | self.configure(validate="none", validatecommand=(numbervalidation, "%P"))
47 |
48 | def addvalidation(self):
49 | if self.validation == "character":
50 | self.configure(validate = "key", validatecommand = (charactervalidation, "%P"))
51 | if self.validation == "none":
52 | self.configure(validate="none", validatecommand=(charactervalidation, "%P"))
53 | if self.validation == "number":
54 | self.configure(validate="key", validatecommand=(numbervalidation, "%P"))
55 | if self.validation == "time":
56 | self.configure(validate="key", validatecommand=(timevalidation, "%P"))
57 | # Key validate whenever any keystroke changes the widget's contents
58 |
59 | def addcensorship(self):
60 | if self.validation == "password":
61 | show = "*"
62 |
63 | def only_numeric_input(P):
64 | # checks if entry's value is an integer or empty and returns an appropriate boolean
65 | if P.isdigit() or P == "": # if a digit was entered or nothing was entered
66 | return True
67 | return False
68 |
69 | def only_character_input(P):
70 | if P.isalpha() or P == "":
71 | return True
72 | return False
73 |
74 | def only_time_input(P):
75 | text = P # e.get()
76 |
77 | parts = text.split(':')
78 | parts_number = len(parts)
79 |
80 | if parts_number > 2:
81 | return False
82 |
83 | if parts_number > 1 and parts[1]:
84 | if not parts[1].isdecimal() or len(parts[1]) > 2:
85 | return False
86 |
87 | if parts_number > 0 and parts[0]: # don't check empty string
88 | if not parts[0].isdecimal() or len(parts[0]) > 8:
89 | # print('wrong first part')
90 | return False
91 |
92 | return True
93 |
94 |
95 | # Register is to check every keystroke the character enters
96 | # Then checks if the keystroke is valid for that specific function
97 | charactervalidation = root.register(only_character_input)
98 | numbervalidation = root.register(only_numeric_input)
99 | timevalidation = root.register(only_time_input)
100 |
101 | numberPlaceHolder= PlaceholderEntry(testframe,"Number", "number")
102 | numberPlaceHolder.grid(row = 1, column = 1, columnspan = 3,pady = 10)
103 | timePlaceHolder = PlaceholderEntry(testframe,"Time","time")
104 | timePlaceHolder.grid(row = 2, column = 1, padx = 100,pady = 10)
105 | charPlaceHolder = PlaceholderEntry(testframe,"Character","character")
106 | charPlaceHolder.grid(row = 3, column = 1,pady = 10)
107 |
108 | mainloop()
--------------------------------------------------------------------------------
/PostcodeMap/Example.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
25 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/PostcodeMap/Map.py:
--------------------------------------------------------------------------------
1 | import folium
2 | from geopy.geocoders import Nominatim
3 | import urllib.request
4 | import json
5 | import tkinter as tk
6 | from tkinter import messagebox
7 | from math import radians, cos, sin, asin, sqrt
8 | import webbrowser
9 | import os
10 | from PIL import ImageTk, Image
11 | import random
12 |
13 | # Constants
14 | INST_LAT = 54.597045
15 | INST_LONG = -5.936478
16 |
17 |
18 | # Obtain the dictionary of data associated with postcode.
19 | def getLatLong(postcode):
20 | try:
21 | # request for postcode data
22 | res = urllib.request.urlopen("http://api.postcodes.io/postcodes/{}".format(postcode)).read()
23 | data = json.loads(res)
24 | makeMap(data)
25 | addtionalInfo(data)
26 | except Exception as e:
27 | print(e)
28 | tk.messagebox.showerror("Error!", e)
29 |
30 |
31 | def haversine(lon1, lat1, lon2, lat2):
32 | """
33 | Calculate the distance between two points
34 | on the earth (specified in decimal degrees)
35 | """
36 | # convert decimal degrees to radians
37 | lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
38 | # haversine formula
39 | dlon = lon2 - lon1
40 | dlat = lat2 - lat1
41 | a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
42 | c = 2 * asin(sqrt(a))
43 | # Radius of earth in kilometers is 6371
44 | km = 6371 * c
45 | km = round(km, 3)
46 | return km
47 |
48 |
49 | def makeMap(data):
50 |
51 | m = folium.Map(
52 | location=[INST_LAT, INST_LONG],
53 | zoom_start=9,
54 | tiles='Stamen Terrain'
55 | )
56 | tooltip = 'Click me!'
57 | # make INST Marker
58 | folium.Marker([INST_LAT, INST_LONG], popup='INST', tooltip=tooltip).add_to(m)
59 | # make Users Marker
60 | folium.Marker([data["result"]["latitude"], data["result"]["longitude"]], popup='User Input',
61 | tooltip=tooltip).add_to(m)
62 | # list of tuples containing lat and longs to create line
63 | points = [(INST_LAT, INST_LONG), (data["result"]["latitude"], data["result"]["longitude"])]
64 | # calculate distance between two points using Haversine Formula. Uses Km
65 | distance = haversine(data["result"]["longitude"], data["result"]["latitude"], INST_LONG, INST_LAT)
66 | folium.PolyLine(points, color="red", weight=2.5, opacity=1, tooltip=str(distance) + "km").add_to(m)
67 | m.save('INSTOpenDayMaps.html')
68 | # Auto open
69 | webbrowser.open('file://' + os.path.realpath('INSTOpenDayMaps.html'))
70 |
71 | def addtionalInfo(data):
72 | addInfoLabel = tk.Label(root, text="Additional Info", bg=lightbluecolor, font=("Courier", 40))
73 | addInfoLabel.grid(row=4, column=1, columnspan=5)
74 | rowcount = 5
75 | # Create Labels for each bit of data
76 | for label in ("Strategic Health Authority", "Parliamentary Constituency", "Administrative/Electoral Area"):
77 | tk.Label(root, text=(label + ": "), bg=lightbluecolor, font=("Courier", 20)).grid(row=rowcount, column=1)
78 | rowcount += 1
79 |
80 | SHAEntry = tk.Label(root, textvariable=SHAVar, bg=lightbluecolor, font=("Courier", 20), width=40)
81 | SHAEntry.grid(row=5, column=2)
82 | PCEntry = tk.Label(root, textvariable=PCVar, bg=lightbluecolor, font=("Courier", 20), width=40)
83 | PCEntry.grid(row=6, column=2)
84 | AEntry = tk.Label(root, textvariable=AVar, bg=lightbluecolor, font=("Courier", 20), width=40)
85 | AEntry.grid(row=7, column=2)
86 | SHAVar.set(data["result"]["nhs_ha"])
87 | PCVar.set(data["result"]["parliamentary_constituency"])
88 | AVar.set(data["result"]["admin_ward"])
89 |
90 |
91 | # color
92 | lightbluecolor = '#%02x%02x%02x' % (93, 188, 210)
93 | root = tk.Tk()
94 | root.title("RBAI Open Day Map Application")
95 | root.configure(bg=lightbluecolor)
96 | # Tkinter Variables
97 | inputtedPostcode = tk.StringVar()
98 | SHAVar = tk.StringVar()
99 | PCVar = tk.StringVar()
100 | AVar = tk.StringVar()
101 | mode = tk.IntVar()
102 | # Images
103 | ukImg = ImageTk.PhotoImage(Image.open("uk.jpg"))
104 |
105 | titleLabel = tk.Label(root, text="RBAI Open Day Map Application", bg=lightbluecolor, font=("Courier", 40))
106 | titleLabel.grid(row=0, column=1, columnspan=5)
107 | imageLabel = tk.Label(root, image=ukImg, bg=lightbluecolor, fg=lightbluecolor)
108 | imageLabel.grid(row=1, column=1, columnspan=5)
109 | postcodeLabel = tk.Label(root, text="Enter Postcode: ", bg=lightbluecolor, font=("Courier", 20))
110 | postcodeLabel.grid(row=2, column=1)
111 | postcodeEntry = tk.Entry(root, textvariable=inputtedPostcode, font=("Courier", 20))
112 | postcodeEntry.grid(row=2, column=2)
113 | generateButton = tk.Button(root, text="Generate!", bg="white", font=("Courier", 20),
114 | command=lambda: getLatLong(inputtedPostcode.get()))
115 | generateButton.grid(row=3, column=2)
116 |
117 | root.mainloop()
--------------------------------------------------------------------------------
/PostcodeMap/map.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/PostcodeMap/uk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/PostcodeMap/uk.jpg
--------------------------------------------------------------------------------
/PythonMegaWidgets/Counter.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | import Pmw
3 | root = tk.Tk()
4 | Pmw.initialise(root)
5 | root.title("Counter App")
6 | myFrame = tk.Frame(root)
7 | myFrame.grid(row=1,column=1,columnspan=5)
8 | myFrame.configure(bg='pink')
9 | #Integer counter
10 | counter = Pmw.Counter(myFrame)
11 | counter.setentry(10)
12 | #add
13 | counter.increment()
14 | #subtract
15 | counter.decrement()
16 | counter.grid(row=1,column=1)
17 | #time counter, counts minutes and is vertical
18 | timeCounter = Pmw.Counter(myFrame,datatype = "time",increment=60,orient="vertical")
19 | timeCounter.setentry("00:00:00")
20 | timeCounter.grid(row=2,column=1)
21 | timeCounter.configure(
22 | downarrow_background= 'purple',
23 | uparrow_background = 'blue',
24 | hull_relief = 'sunken',
25 | hull_borderwidth=5,
26 | )
27 | tk.Label(myFrame,text="I am in MyFrame \n The hull is the frame keeping the widgets making up the mega widget together").grid(row=3,column=1)
28 | root.mainloop()
--------------------------------------------------------------------------------
/PythonMegaWidgets/Tooltips.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter.font import Font
3 | import Pmw
4 | root = tk.Tk()
5 | root.title("Basic Interface")
6 | Pmw.initialise(root)
7 | interface=tk.Frame(root)
8 | interface.configure(bg='white')
9 | interface.grid(row=0, column=0,sticky='news')
10 | interface.tkraise()
11 | #Tkinter Variables
12 | inputedData= tk.StringVar()
13 | outputData= tk.StringVar()
14 | #Define Functions
15 | def Process():
16 | getData=inputedData.get()
17 | print(getData)
18 | outputData.set(getData)
19 |
20 |
21 | #Fonts
22 | titleFont = Font(family="Arial", size="48")
23 | labelFont = Font(family="Arial", size="24")
24 | buttonFont = Font(family="Arial",size = "20")
25 | #Labels
26 | titleLabel=tk.Label(interface,text="Interface Title",fg="black",font=titleFont,bg='white')
27 | titleLabel.grid(row=1,column=1,columnspan=5)
28 | inputLabel=tk.Label(interface,text="Input Data: ",fg="black",font=labelFont,bg='white')
29 | inputLabel.grid(row=2,column=1)
30 | oLabel=tk.Label(interface,text="Output Data: ",fg="black",font=labelFont,bg='white')
31 | oLabel.grid(row=3,column=1)
32 | outputLabel=tk.Label(interface,textvariable=outputData,fg="black",font=labelFont,bg='white')
33 | outputLabel.grid(row=3,column=2)
34 | #Entry Boxes
35 | FirstEntry=tk.Entry(interface,textvariable=inputedData,font=labelFont)
36 | FirstEntry.grid(row=2,column=2,columnspan=2)
37 |
38 | #Buttons
39 | processButton=tk.Button(interface,text="Process",command=Process,fg="black",font=buttonFont,bg='white')
40 | processButton.grid(row=4,column=2)
41 |
42 | #Balloons (Tooltips)
43 | processTooltip = Pmw.Balloon(interface)
44 | processTooltip.bind(processButton,"Process Button\nThis button will make your inputted word appear in the output section.")
45 |
46 | entryTooltip = Pmw.Balloon(interface)
47 | entryTooltip.bind(FirstEntry,"Please input a word.")
48 |
49 | labelTooltip = Pmw.Balloon(interface)
50 | labelTooltip.bind(outputLabel,"Here is your outputted word!")
51 | root.mainloop()
52 |
--------------------------------------------------------------------------------
/QR Code.py:
--------------------------------------------------------------------------------
1 | import qrcode
2 |
3 | qr = qrcode.QRCode(
4 | version=1,
5 | error_correction=qrcode.constants.ERROR_CORRECT_M,
6 | box_size=15,
7 | border=5
8 | )
9 | data = 'google.com'
10 | qr.add_data(data)
11 | qr.make(fit=True)
12 | img = qr.make_image(fill_color='green',back_color = 'yellow')
13 | img.save('myQR.png')
14 |
--------------------------------------------------------------------------------
/Queues.py:
--------------------------------------------------------------------------------
1 | queue=[]
2 | def view():
3 | for x in range(len(queue)):
4 | print(queue[x])
5 | def push():
6 | item = input("Please enter the item you wish to add to the Queue: ")
7 | queue.append(item)
8 | def pop():
9 | item = queue.pop(0)
10 | print("You just popped out",item)
11 | def peek():
12 | item = queue[0]
13 | print("You peeked",queue[0])
14 |
15 | while True:
16 | print("")
17 | print("=========================")
18 | print("1. View Queue")
19 | print("2. Push onto Queue")
20 | print("3. Pop out of Queue")
21 | print("4. Peek Queue")
22 | print("=========================")
23 | print("")
24 | choice=int(input("Please enter your menu choice: "))
25 | if choice == 1:
26 | view()
27 | elif choice ==2:
28 | push()
29 | elif choice ==3:
30 | pop()
31 | elif choice ==4:
32 | peek()
33 | else:
34 | print("Invalid Input")
35 |
--------------------------------------------------------------------------------
/ScrolledTextWidget/ScrolledText Widget.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import scrolledtext
3 | #Declare Root
4 | root = tk.Tk()
5 | root.title("Scrolltext Widget")
6 | tk.Label(root,text="My Scrolled Text Widget",font=("Times New Roman",25))\
7 | .grid(row=0,column=1)
8 | #Define ScrollTextWidget
9 | #wrap keyword used to wrap around text
10 | myScrollTextWidget = scrolledtext.ScrolledText(root,wrap=tk.WORD,width=50,height=20,font=("Times New Roman",15))
11 | myScrollTextWidget.grid(row=1,column=1)
12 | def printToConsole():
13 | print(myScrollTextWidget.get("1.0","end-1c"))
14 | #Buttons
15 | myButton = tk.Button(root,text="Print to console!",command=printToConsole).grid(row=2,column=1)
16 | myScrollTextWidget.insert(tk.INSERT, "Hello")
17 |
18 | root.mainloop()
--------------------------------------------------------------------------------
/Signature.py:
--------------------------------------------------------------------------------
1 | from tkinter import *
2 | from PIL import Image, ImageDraw
3 |
4 | #Create tkinter frame and canvas
5 | tk = Tk()
6 | tk.title("Signature Please")
7 | cvs = Canvas(tk, width=500,height=500)
8 | cvs.pack()
9 |
10 | #Define internal PIL image
11 | img = Image.new('RGB', (500,500),(255,255,255))
12 | draw = ImageDraw.Draw(img)
13 |
14 | #Define boolean value for mouse button pressed
15 | mousePressed = False
16 |
17 | last = None
18 | #Called upon left clicking
19 | def press(evt):
20 | global mousePressed
21 | mousePressed= True
22 |
23 | #Called upon release of left click
24 | def release(evt):
25 | #Save Image
26 | img.save('img.png')
27 | tk.destroy()
28 |
29 | #Event binding
30 | cvs.bind_all('', press)
31 | cvs.bind_all('',release)
32 |
33 | #Drawing
34 | def move(evt):
35 | global mousePressed, last
36 | x, y = evt.x,evt.y
37 | if mousePressed:
38 | #last stores the previous x,y position of the mouse on the canvas
39 | if last is None:
40 | last = (x,y)
41 | return
42 | draw.line(((x,y),last),(0,0,0))
43 | #Draw Line on Canvas
44 | cvs.create_line(x,y,last[0], last[1])
45 | last = (x,y)
46 |
47 | #Calls drawing function on mouse movement
48 | cvs.bind_all('',move)
49 | tk.mainloop()
--------------------------------------------------------------------------------
/Stacks and Queues.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Stacks and Queues.pptx
--------------------------------------------------------------------------------
/Stacks.py:
--------------------------------------------------------------------------------
1 | stack=[]
2 | def view():
3 | for x in range(len(stack)):
4 | print(stack[x])
5 | def push():
6 | item = input ("Please enter the item you wish to add to the Stack: ")
7 | stack.append(item)
8 | def pop():
9 | item = stack.pop(-1)
10 | print("You just poped out: ",item)
11 | def peek():
12 | item = stack[-1]
13 | print("You just peeked",item)
14 |
15 | while True:
16 | print("")
17 | print("=======================")
18 | print("1.View the Stack")
19 | print("2.Push the Stack")
20 | print("3.Pop the Stack")
21 | print("4.Peek the Stack")
22 | print("=======================")
23 | print("")
24 | choice = int(input("Please enter a menu choice: "))
25 |
26 | if choice == 1:
27 | view()
28 | elif choice == 2:
29 | push()
30 | elif choice == 3:
31 | pop()
32 | elif choice==4:
33 | peek()
34 | else:
35 | print("Input Incorrect")
36 |
--------------------------------------------------------------------------------
/StyleTreeviews/TreeviewStyle.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import messagebox
3 | from tkinter.font import Font
4 | from tkinter import scrolledtext
5 | from tkinter import ttk
6 | import mysql.connector
7 | import random
8 | #mydb definition
9 | # Connect MySQL
10 | if True:
11 | mydb = mysql.connector.connect(
12 | host="localhost",
13 | user="root",
14 | passwd="Cranmore1!",
15 | database="cafefishdb"
16 | )
17 |
18 | # Outputs Connection Object
19 | print(mydb)
20 | mycursor = mydb.cursor()
21 | #Create mysql
22 | mycursor.execute("""CREATE TABLE IF NOT EXISTS employee(employeeID int ,firstname VARCHAR(255),secondname VARCHAR(255),gender VARCHAR(255),jobtype VARCHAR(255),hourlywage int)""")
23 | #import mysql.connector
24 | root=tk.Tk()
25 | root.title("Cafe Fish System")
26 | #Define Frames
27 | treeviewFrame=tk.Frame(root)
28 | createFrame=tk.Frame(root)
29 | retrieveFrame=tk.Frame(root)
30 | updateFrame=tk.Frame(root)
31 | deleteFrame=tk.Frame(root)
32 |
33 | #Define Frame List
34 | frameList=[treeviewFrame,createFrame,updateFrame,retrieveFrame,deleteFrame]
35 | #Configure all Frames
36 | for frame in frameList:
37 | frame.grid(row=0,column=0, sticky='news')
38 | frame.configure(bg='lightblue')
39 |
40 | def raiseFrame(frame):
41 | frame.tkraise()
42 | def raiseBack():
43 | #Clear Variables
44 | firstName.set("")
45 | secondName.set("")
46 | gender.set("")
47 | wage.set(0.00)
48 | job.set("Frycook")
49 | treeviewEmployeeUpdate()
50 | treeviewFrame.tkraise()
51 | def raiseCreate():
52 | job.set("Frycook")
53 | gender.set("Male")
54 | createFrame.tkraise()
55 | def raiseRetrieve():
56 | nameList=[]
57 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
58 | myresults=mycursor.fetchall()
59 | for i in myresults:
60 | name=i[0]+" "+i[1]
61 | nameList.append(name)
62 | searchOM = tk.OptionMenu(retrieveFrame, searchTerm, *nameList)
63 | searchOM.grid(row=2, column=2)
64 | retrieveFrame.tkraise()
65 | def raiseUpdate():
66 | nameList=[]
67 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
68 | myresults=mycursor.fetchall()
69 | for i in myresults:
70 | name=i[0]+" "+i[1]
71 | nameList.append(name)
72 | searchOM = tk.OptionMenu(updateFrame, updateTerm, *nameList)
73 | searchOM.grid(row=2, column=2)
74 | job.set("Frycook")
75 | gender.set("Male")
76 | updateFrame.tkraise()
77 | def raiseDelete():
78 | nameList=[]
79 | mycursor.execute("""SELECT firstname,secondname FROM employee""")
80 | myresults=mycursor.fetchall()
81 | for i in myresults:
82 | name=i[0]+" "+i[1]
83 | nameList.append(name)
84 | searchOM = tk.OptionMenu(deleteFrame, deleteTerm, *nameList)
85 | searchOM.grid(row=2, column=2)
86 | deleteFrame.tkraise()
87 |
88 | #SQL
89 | def create():
90 | employeeID=random.randint(1,5000)
91 | insertSQL="""INSERT INTO employee (employeeID,firstname,secondname,gender,jobtype,hourlywage) VALUES(%s,%s,%s,%s,%s,%s)"""
92 | mycursor.execute(insertSQL,(employeeID,firstName.get(),secondName.get(),gender.get(),job.get(),wage.get()))
93 | mydb.commit()
94 | treeviewEmployeeUpdate()
95 | pass
96 | def retrieve():
97 | fName,sName=searchTerm.get().split(" ")
98 | selectSQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
99 | mycursor.execute(selectSQL,(fName,sName))
100 | myresult=mycursor.fetchone()
101 | print(myresult)
102 | firstName.set(myresult[0])
103 | secondName.set(myresult[1])
104 | gender.set(myresult[2])
105 | job.set(myresult[3])
106 | wage.set(myresult[4])
107 | pass
108 | def update():
109 | fName,sName=updateTerm.get().split(" ")
110 | updateSQL="""UPDATE employee SET firstname=%s,secondname=%s,gender=%s,jobtype=%s,hourlywage=%s WHERE firstname=%s AND secondname=%s"""
111 | mycursor.execute(updateSQL,(firstName.get(),secondName.get(),gender.get(),job.get(),wage.get(),fName,sName))
112 | mydb.commit()
113 | treeviewEmployeeUpdate()
114 | pass
115 | def delete():
116 | fName,sName=deleteTerm.get().split(" ")
117 | deleteSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
118 | mycursor.execute(deleteSQL,(fName,sName))
119 | mydb.commit()
120 | treeviewEmployeeUpdate()
121 | pass
122 |
123 | def fillEntryFields(a,b,c):
124 | fName,sName=updateTerm.get().split(" ")
125 | SQL="""SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee WHERE firstname=%s AND secondname=%s"""
126 | mycursor.execute(SQL,(fName,sName))
127 | myresults=mycursor.fetchone()
128 | firstName.set(myresults[0])
129 | secondName.set(myresults[1])
130 | gender.set(myresults[2])
131 | job.set(myresults[3])
132 | wage.set(myresults[4])
133 |
134 | def treeviewEmployeeUpdate():
135 | #Delete Everything From Treeview
136 | Remove = EmployView.get_children()
137 | for child in Remove:
138 | EmployView.delete(child)
139 | #Input New Data Into Treeview Widget
140 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee")
141 | myresults=mycursor.fetchall()
142 | for i in myresults:
143 | print(i[3])
144 | EmployView.insert("","end",tags=(i[3]),text="",values=(i[0],i[1],i[2],i[3],i[4]))
145 |
146 | def fireEmployee():
147 | items=EmployView.selection()
148 | print(items)
149 | employeeData=[]
150 | for i in items:
151 | employeeData.append(EmployView.item(i)['values'])
152 | print(employeeData)
153 | for employee in employeeData:
154 | fireEmployeeSQL="""DELETE FROM employee WHERE firstname=%s AND secondname=%s"""
155 | mycursor.execute(fireEmployeeSQL,(employee[0],employee[1]))
156 | print("Deleted",employee[0],employee[1])
157 | mydb.commit()
158 |
159 | #Tkinter Variable
160 | firstName=tk.StringVar()
161 | secondName=tk.StringVar()
162 | gender=tk.StringVar()
163 | wage=tk.StringVar()
164 | job=tk.StringVar()
165 |
166 | searchTerm=tk.StringVar()
167 | deleteTerm=tk.StringVar()
168 | updateTerm=tk.StringVar()
169 | updateTerm.trace('w',fillEntryFields)
170 | #Setting Default Values
171 | firstName.set("")
172 | secondName.set("")
173 | gender.set("")
174 | wage.set(0.00)
175 | job.set("Frycook")
176 | #Fonts
177 | titleFont = Font(family="Arial", size="48")
178 | labelFont = Font(family="Arial", size="24")
179 | buttonFont = Font(family="Arial",size = "20")
180 |
181 | #Treeview Styles
182 | treeStyle= ttk.Style()
183 | treeStyle.configure("mystyle.Treeview",highlightthickness=0,bd=0,font=('Georgia',15))
184 | treeStyle.configure("mystyle.Treeview.Heading",font=('Arial',16,'bold'))
185 | treeStyle.layout("mystyle.Treeview",[("mystyle.Treeview.treearea",{'sticky':'nswe'})])
186 | #treeview Frame Widgets Define
187 |
188 | EmployView=ttk.Treeview(treeviewFrame)
189 | EmployView['columns']=("firstname","secondname","gender","jobtype","hourlywage")
190 | EmployView.grid(row=2,column=1,columnspan=5)
191 | EmployView.heading("#0",text="",anchor="w")
192 | EmployView.column("#0",anchor="center",width=5,stretch=tk.NO)
193 | EmployView.heading("firstname",text="First Name",anchor="w")
194 | EmployView.column("firstname",anchor="center",width=80)
195 | EmployView.heading("secondname",text="Second Name",anchor="w")
196 | EmployView.column("secondname",anchor="center",width=80)
197 | EmployView.heading("gender",text="Gender",anchor="w")
198 | EmployView.column("gender",anchor="center",width=80)
199 | EmployView.heading("jobtype",text="Job Type",anchor="w")
200 | EmployView.column("jobtype",anchor="center",width=80)
201 | EmployView.heading("hourlywage",text="Hourly Wage",anchor="w")
202 | EmployView.column("hourlywage",anchor="center",width=80)
203 | EmployViewScrollbar=ttk.Scrollbar(treeviewFrame,orient="vertical",command=EmployView.yview)
204 | EmployView.configure(yscroll=EmployViewScrollbar.set)
205 | EmployViewScrollbar.grid(row=2,column=6,sticky="ns")
206 | EmployView.bind("",lambda e: fireEmployee())
207 |
208 | #Tags
209 | EmployView.tag_configure("Frycook", background="misty rose",font=("Georgia",10))
210 | EmployView.tag_configure("Register", background="light blue",font=("Comic Sans MS",10))
211 | EmployView.tag_configure("Waiter", background="yellow",font=("Arial",10))
212 | #Labels
213 | titleLabel=tk.Label(treeviewFrame,text="Cafe Fish Employee Table",font=titleFont,bg='blue',fg='lightblue')
214 | titleLabel.grid(row=1,column=1,columnspan=5)
215 | #Buttons
216 | createButton=tk.Button(treeviewFrame,text="Create",font=buttonFont,bg='blue',fg='lightblue',command=raiseCreate)
217 | createButton.grid(row=3,column=1)
218 | retrieveButton=tk.Button(treeviewFrame,text="Retrieve",font=buttonFont,bg='blue',fg='lightblue',command=raiseRetrieve)
219 | retrieveButton.grid(row=3,column=2)
220 | updateButton=tk.Button(treeviewFrame,text="Update",font=buttonFont,bg='blue',fg='lightblue',command=raiseUpdate)
221 | updateButton.grid(row=3,column=3)
222 | deleteButton=tk.Button(treeviewFrame,text="Delete",font=buttonFont,bg='blue',fg='lightblue',command=raiseDelete)
223 | deleteButton.grid(row=3,column=4)
224 |
225 | #Create Frame Widgets
226 | #createFrame
227 | createTLabel=tk.Label(createFrame,text="Create Record In Table",font=titleFont,bg='lightblue',fg='blue')
228 | createTLabel.grid(row=1,column=1,columnspan=5)
229 | createFNameLabel=tk.Label(createFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
230 | createFNameLabel.grid(row=2,column=1)
231 | createSNameLabel=tk.Label(createFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
232 | createSNameLabel.grid(row=3,column=1)
233 | createGenderLabel=tk.Label(createFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
234 | createGenderLabel.grid(row=4,column=1)
235 | createJobTypeLabel=tk.Label(createFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
236 | createJobTypeLabel.grid(row=5,column=1)
237 | createHourlyWageLabel=tk.Label(createFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
238 | createHourlyWageLabel.grid(row=6,column=1)
239 | #Label Widgets
240 | createFNameLabel=tk.Entry(createFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
241 | createFNameLabel.grid(row=2,column=2)
242 | createSNameLabel=tk.Entry(createFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
243 | createSNameLabel.grid(row=3,column=2)
244 | createWageLabel=tk.Entry(createFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
245 | createWageLabel.grid(row=6,column=2)
246 | createGenderRBM=tk.Radiobutton(createFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
247 | createGenderRBM.grid(row=4,column=2)
248 | createGenderRBF=tk.Radiobutton(createFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
249 | createGenderRBF.grid(row=4,column=3)
250 | jobList=["Frycook","Register","Waiter","Stock Manager"]
251 | createJobTypeOM=tk.OptionMenu(createFrame,job,*jobList)
252 | createJobTypeOM.grid(row=5,column=2)
253 | #Button
254 | createcButton=tk.Button(createFrame,text="Create",command=create,font=buttonFont,bg="blue",fg="lightblue")
255 | createcButton.grid(row=7,column=2)
256 | backCButton=tk.Button(createFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
257 | backCButton.grid(row=7,column=1)
258 |
259 | #Retrieve Frame Widgets
260 | #retrieveFrame
261 | retrieveTLabel=tk.Label(retrieveFrame,text="Retrieve Record In Table",font=titleFont,bg='lightblue',fg='blue')
262 | retrieveTLabel.grid(row=1,column=1,columnspan=5)
263 | retrieveSearchLabel=tk.Label(retrieveFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
264 | retrieveSearchLabel.grid(row=2,column=1)
265 | retrieveFNameLabel=tk.Label(retrieveFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
266 | retrieveFNameLabel.grid(row=3,column=1)
267 | retrieveSNameLabel=tk.Label(retrieveFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
268 | retrieveSNameLabel.grid(row=4,column=1)
269 | retrieveGenderLabel=tk.Label(retrieveFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
270 | retrieveGenderLabel.grid(row=5,column=1)
271 | retrieveJobTypeLabel=tk.Label(retrieveFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
272 | retrieveJobTypeLabel.grid(row=6,column=1)
273 | retrieveHourlyWageLabel=tk.Label(retrieveFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
274 | retrieveHourlyWageLabel.grid(row=7,column=1)
275 | #Retrieved Data Label Widgets
276 | retrieveFNameLabelData=tk.Label(retrieveFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
277 | retrieveFNameLabelData.grid(row=3,column=2)
278 | retrieveSNameLabelData=tk.Label(retrieveFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
279 | retrieveSNameLabelData.grid(row=4,column=2)
280 | retrieveWageLabelData=tk.Label(retrieveFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
281 | retrieveWageLabelData.grid(row=7,column=2)
282 | retrieveGenderLabelData=tk.Label(retrieveFrame,textvariable=gender,font=labelFont,bg='lightblue',fg='blue')
283 | retrieveGenderLabelData.grid(row=5,column=2)
284 | jobList=["Frycook","Register","Waiter","Stock Manager"]
285 | retrieveJobTypeOM=tk.OptionMenu(retrieveFrame,job,*jobList)
286 | retrieveJobTypeOM.grid(row=6,column=2)
287 | #Button
288 | retrievecButton=tk.Button(retrieveFrame,text="Retrieve",command=retrieve,font=buttonFont,bg="blue",fg="lightblue")
289 | retrievecButton.grid(row=8,column=2)
290 | backCButton=tk.Button(retrieveFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
291 | backCButton.grid(row=8,column=1)
292 |
293 | #Update Frame Widgets
294 | #updateFrame
295 | updateTLabel=tk.Label(updateFrame,text="Update Record In Table",font=titleFont,bg='lightblue',fg='blue')
296 | updateTLabel.grid(row=1,column=1,columnspan=5)
297 | updateSearchNameLabel=tk.Label(updateFrame,text="Search Name: ",font=labelFont,bg='lightblue',fg='blue')
298 | updateSearchNameLabel.grid(row=2,column=1)
299 | updateFNameLabel=tk.Label(updateFrame,text="First Name: ",font=labelFont,bg='lightblue',fg='blue')
300 | updateFNameLabel.grid(row=3,column=1)
301 | updateSNameLabel=tk.Label(updateFrame,text="Second Name: ",font=labelFont,bg='lightblue',fg='blue')
302 | updateSNameLabel.grid(row=4,column=1)
303 | updateGenderLabel=tk.Label(updateFrame,text="Gender: ",font=labelFont,bg='lightblue',fg='blue')
304 | updateGenderLabel.grid(row=5,column=1)
305 | updateJobTypeLabel=tk.Label(updateFrame,text="Job Type: ",font=labelFont,bg='lightblue',fg='blue')
306 | updateJobTypeLabel.grid(row=6,column=1)
307 | updateHourlyWageLabel=tk.Label(updateFrame,text="Hourly Wage £: ",font=labelFont,bg='lightblue',fg='blue')
308 | updateHourlyWageLabel.grid(row=7,column=1)
309 | #Label Widgets
310 | updateFNameLabel=tk.Entry(updateFrame,textvariable=firstName,font=labelFont,bg='lightblue',fg='blue')
311 | updateFNameLabel.grid(row=3,column=2)
312 | updateSNameLabel=tk.Entry(updateFrame,textvariable=secondName,font=labelFont,bg='lightblue',fg='blue')
313 | updateSNameLabel.grid(row=4,column=2)
314 | updateWageLabel=tk.Entry(updateFrame,textvariable=wage,font=labelFont,width=5,bg='lightblue',fg='blue')
315 | updateWageLabel.grid(row=7,column=2)
316 | updateGenderRBM=tk.Radiobutton(updateFrame, text="Male",variable=gender,value="Male",font=labelFont,bg='lightblue',fg='blue')
317 | updateGenderRBM.grid(row=5,column=2)
318 | updateGenderRBF=tk.Radiobutton(updateFrame, text="Female",variable=gender,value="Female",font=labelFont,bg='lightblue',fg='blue')
319 | updateGenderRBF.grid(row=5,column=3)
320 | jobList=["Frycook","Register","Waiter","Stock Manager"]
321 | updateJobTypeOM=tk.OptionMenu(updateFrame,job,*jobList)
322 | updateJobTypeOM.grid(row=6,column=2)
323 | #Button
324 | updatecButton=tk.Button(updateFrame,text="Update",command=update,font=buttonFont,bg="blue",fg="lightblue")
325 | updatecButton.grid(row=8,column=2)
326 | backUButton=tk.Button(updateFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
327 | backUButton.grid(row=8,column=1)
328 |
329 | #Delete Frame Widgets
330 | #deleteFrame
331 | #Labels
332 | deleteTLabel=tk.Label(deleteFrame,text="Delete Record In Table",font=titleFont,bg='lightblue',fg='blue')
333 | deleteTLabel.grid(row=1,column=1,columnspan=5)
334 | deleteLabel=tk.Label(deleteFrame,text="Delete: ",font=labelFont,bg='lightblue',fg='blue')
335 | deleteLabel.grid(row=2,column=1)
336 | deleteButton=tk.Button(deleteFrame,text="Delete",command=delete,font=buttonFont,bg="blue",fg="lightblue")
337 | deleteButton.grid(row=2,column=3)
338 | backUButton=tk.Button(deleteFrame,text="Back",command=raiseBack,font=labelFont,bg="blue",fg="lightblue")
339 | backUButton.grid(row=3,column=3)
340 |
341 | #Updates Treeview on Initial Startup
342 | treeviewEmployeeUpdate()
343 | raiseFrame(treeviewFrame)
344 | root.mainloop()
345 |
346 |
--------------------------------------------------------------------------------
/Subqueries Powerpoint.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/Subqueries Powerpoint.pptx
--------------------------------------------------------------------------------
/Treeview (Code Snippet).py:
--------------------------------------------------------------------------------
1 | #Ensure you have imported ttk
2 | from tkinter import ttk
3 | #Defining The Treeview Widget
4 | EmployView=ttk.Treeview(FRAME NAME)
5 | EmployView['columns']=("firstname","secondname","gender","jobtype","hourlywage")
6 | EmployView.grid(row=2,column=1,columnspan=5)
7 | EmployView.heading("#0",text="",anchor="w")
8 | EmployView.column("#0",anchor="center",width=5,stretch=tk.NO)
9 | EmployView.heading("firstname",text="First Name",anchor="w")
10 | EmployView.column("firstname",anchor="center",width=80)
11 | EmployView.heading("secondname",text="Second Name",anchor="w")
12 | EmployView.column("secondname",anchor="center",width=80)
13 | EmployView.heading("gender",text="Gender",anchor="w")
14 | EmployView.column("gender",anchor="center",width=80)
15 | EmployView.heading("jobtype",text="Job Type",anchor="w")
16 | EmployView.column("jobtype",anchor="center",width=80)
17 | EmployView.heading("hourlywage",text="Hourly Wage",anchor="w")
18 | EmployView.column("hourlywage",anchor="center",width=80)
19 |
20 | #Update Function
21 | def treeviewEmployeeUpdate():
22 | # Delete Everything From Treeview
23 | Remove = EmployView.get_children()
24 | for child in Remove:
25 | EmployView.delete(child)
26 | # SELECT data from table
27 | mycursor.execute("SELECT firstname,secondname,gender,jobtype,hourlywage FROM employee")
28 | myresults = mycursor.fetchall()
29 | #Insert obtained data into treeview widget
30 | for i in myresults:
31 | EmployView.insert("", "end", text="", values=(i[0], i[1], i[2], i[3], i[4]))
32 |
33 | #Call the function:
34 | treeviewEmployeeUpdate()
35 | #Remember you do not need to update the treeview when RETRIEVING data from a table.
36 | #You must update the treeview when;CREATING,UPDATING or DELETING from a table.
--------------------------------------------------------------------------------
/UI presentation/UI Design.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadiantCoding/Code/bcd6e437504c8984883172bb87fce6f384b8b17a/UI presentation/UI Design.pptx
--------------------------------------------------------------------------------
/UI presentation/test.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Word Doc - Simple Table.py:
--------------------------------------------------------------------------------
1 | import docx
2 | import os
3 |
4 | doc = docx.Document()
5 |
6 | doc.add_heading('Table Document',0)
7 |
8 | records = [
9 | [1, 'Chicken Pasta Bake', '£4.50'],
10 | [2, 'Starfish Cakes', '£5.00'],
11 | [3, 'Cod Confit', '£2.75']
12 | ]
13 | menuTable = doc.add_table(rows=1,cols=3)
14 | menuTable.style= 'Medium Shading 2 Accent 3'
15 | hdr_Cells = menuTable.rows[0].cells
16 | hdr_Cells[0].text = 'ID'
17 | hdr_Cells[1].text = 'Meal Name'
18 | hdr_Cells[2].text = 'Price'
19 |
20 | for ID, nameOfMeal, price in records:
21 | row_Cells = menuTable.add_row().cells
22 | row_Cells[0].text= str(ID)
23 | row_Cells[1].text = nameOfMeal
24 | row_Cells[2].text = price
25 |
26 | doc.save('table.docx')
27 | os.system("start table.docx")
28 |
--------------------------------------------------------------------------------
/Word Doc -Read Doc.py:
--------------------------------------------------------------------------------
1 | import docx
2 |
3 | def ReadDoc(filename):
4 | doc = docx.Document(filename)
5 |
6 | paragraphs = []
7 | for paragraph in doc.paragraphs:
8 | if len(paragraph.text)>0:
9 | paragraphs.append(paragraph.text)
10 | print(paragraphs)
11 |
12 | ReadDoc("table.docx")
13 |
--------------------------------------------------------------------------------
/Word Doc-Simple Writing.py:
--------------------------------------------------------------------------------
1 | import docx
2 | import os
3 | from docx.shared import Inches
4 | doc = docx.Document()
5 | doc.add_heading('Test Doc',0)
6 | parag=doc.add_paragraph("Hello!")
7 | parag.add_run("This word document was created using, ")
8 | parag.add_run("Python").bold=True
9 | doc.add_heading('Heading Level 1',1)
10 | doc.add_heading('Heading Level 2',2)
11 | italicparagraph=doc.add_paragraph()
12 | italicparagraph.add_run("This line is in italics!").italic=True
13 | doc.add_picture('sample_image.jpg',width=Inches(2.5))
14 | doc.save("test.docx")
15 | os.system("start test.docx")
16 |
--------------------------------------------------------------------------------
/database tut.py:
--------------------------------------------------------------------------------
1 | import mysql.connector
2 | mydb = mysql.connector.connect(
3 | host="localhost",
4 | user="root",
5 | passwd="password123",
6 | database="testdatabase"
7 | )
8 | print(mydb)
9 | mycursor = mydb.cursor()
10 | tableSQL="""CREATE TABLE IF NOT EXISTS pupils (pupilID int,pupilName VARCHAR(255))"""
11 | mycursor.execute(tableSQL)
12 | print("done")
13 |
--------------------------------------------------------------------------------