├── 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 |
16 |
17 |

18 | 19 |

20 |
21 |

22 | 23 |

24 |
-------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------