Advertisement
Guest User

FInal Project

a guest
May 30th, 2023
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. from tkinter import *
  2. import tkinter.ttk as ttk
  3. import sqlite3
  4.  
  5. #create main window
  6. root = Tk()
  7. #create title
  8. root.title("FBI Database")
  9. #size of window
  10. root.geometry("1000x800")
  11.  
  12. conn = sqlite3.connect("criminals.db")
  13. try:
  14. c = conn.cursor()
  15.  
  16. c.execute('''CREATE TABLE IF NOT EXISTS criminals(
  17. first_name TEXT,
  18. last_name TEXT,
  19. sex TEXT,
  20. age INTEGER,
  21. offense TEXT);''')
  22. print('table created successfully')
  23. except:
  24. print('table already exists')
  25. conn.rollback()
  26. #close connection
  27. conn.close()
  28.  
  29. #add function to clear entry boxes
  30. def clearFields():
  31. firstNameEn.delete(0, END)
  32. lastNameEn.delete(0, END)
  33. sexEn.delete(0, END)
  34. ageEn.delete(0, END)
  35. offenseEn.delete(0, END)
  36.  
  37. #add function to add and display records
  38. def addRecord():
  39. #connect to database
  40. # use placeholder variables and dictionary
  41. conn = sqlite3.connect("criminals.db")
  42. try:
  43. c = conn.cursor()
  44. c.execute("INSERT INTO criminals VALUES (?, ?, ?, ?, ?)",
  45. (firstNameEn.get(), lastNameEn.get(), sexEn.get(), int(ageEn.get()), offenseEn.get()))
  46. conn.commit()
  47. print("One record added successfully")
  48. except:
  49. print("Error in the add operation")
  50. conn.rollback()
  51. conn.close()
  52. clearFields()
  53.  
  54. def displayRecords():
  55. for row in tvCriminals.get_children():
  56. tvCriminals.delete(row)
  57. conn = sqlite3.connect("criminals.db")
  58. c = conn.cursor()
  59. c.execute("SELECT *, oid FROM criminals")
  60. rows = c.fetchall()
  61. for row in rows:
  62. first_name, last_name, sex, age, offense, _id = row
  63. tvCriminals.insert("", 'end', text=_id, values=(first_name, last_name, sex, age, offense))
  64.  
  65. conn.close()
  66. clearFields()
  67.  
  68. def updateRecord():
  69. # connect to database
  70. # #use place holder variables and dictionary
  71. conn = sqlite3.connect("criminals.db")
  72. qry = "UPDATE criminals SET last_name=?, sex=?, age=?, offense=? WHERE first_name=?"
  73. try:
  74. c = conn.cursor()
  75. c.execute(qry, (lastNameEn.get(), sexEn.get(), int(ageEn.get()), offenseEn.get(), firstNameEn.get()))
  76.  
  77. conn.commit()
  78. print("One record updated successfully")
  79. except:
  80. print("Error in update operation")
  81. conn.rollback()
  82.  
  83. conn.close()
  84. clearFields()
  85.  
  86.  
  87. def deleteRecord():
  88. conn = sqlite3.connect("criminals.db")
  89. qry = "DELETE FROM criminals WHERE first_name=?"
  90. try:
  91. c = conn.cursor()
  92. c.execute(qry, (firstNameEn.get(),))
  93. conn.commit()
  94. print('Record deleted successfully')
  95. except:
  96. print("Error in delete operation")
  97. conn.rollback()
  98. conn.close()
  99. clearFields()
  100.  
  101.  
  102. def show_selected_record(event):
  103. clearFields()
  104. for selection in tvCriminals.selection():
  105. item = tvCriminals.item(selection)
  106. _id, first_name, last_name, sex, age, offense = item["values"]
  107. firstNameEn.insert(0, first_name)
  108. lastNameEn.insert(0, last_name)
  109. sexEn.insert(0, sex)
  110. ageEn.insert(0, age)
  111. offenseEn.insert(0, offense)
  112.  
  113. #create label widgets
  114. firstNameLb = Label(root, text="First Name")
  115. lastNameLb = Label(root, text="Last Name")
  116. sexLb = Label(root, text="Sex")
  117. ageLb = Label(root, text="Age")
  118. offenseLb = Label(root, text="Offense")
  119.  
  120. #create entry widgets
  121. firstNameEn = Entry(root)
  122. lastNameEn = Entry(root)
  123. sexEn = Entry(root)
  124. ageEn = Entry(root)
  125. offenseEn = Entry(root)
  126.  
  127. #create buttons
  128. addBt = Button(root, text="Add Criminal", command=addRecord)
  129. updateBt = Button(root, text="Update Criminal", command=updateRecord)
  130. displayBt = Button(root, text="Display Criminals", command=displayRecords)
  131. deleteBt = Button(root, text="Delete Criminal", command=deleteRecord)
  132.  
  133. #specify where the grid is for the label widgets
  134. firstNameLb.grid(row=0, column=0)
  135. lastNameLb.grid(row=1, column=0)
  136. sexLb.grid(row=2, column=0)
  137. ageLb.grid(row=3, column=0)
  138. offenseLb.grid(row=4, column=0)
  139.  
  140. #specify where on the grid you're going to add the entry widgets
  141. firstNameEn.grid(row=0, column=1)
  142. lastNameEn.grid(row=1, column=1)
  143. sexEn.grid(row=2, column=1)
  144. ageEn.grid(row=3, column=1)
  145. offenseEn.grid(row=4, column=1)
  146.  
  147. #specify where on the grid you're going to add the button widgets
  148. addBt.grid(row=7, column=0)
  149. deleteBt.grid(row=7, column=1)
  150. updateBt.grid(row=8, column=0)
  151. displayBt.grid(row=9, column=0)
  152.  
  153. # treeview widget
  154. #specify tuple columns
  155. columns = ("#1", "#2", "#3", "#4", "#5", "#6")
  156. #create a treeview widget specify the columns
  157. tvCriminals = ttk.Treeview(root, show="headings", height="5", columns=columns)
  158.  
  159. #specify the heading the corresponding heading
  160. tvCriminals.heading('#1', text='First Name', anchor='center')
  161. tvCriminals.column('#1', width=100, anchor='center', stretch=True)
  162.  
  163. tvCriminals.heading('#2', text='Last Name', anchor='center')
  164. tvCriminals.column('#2', width=100, anchor='center', stretch=True)
  165.  
  166. tvCriminals.heading('#3', text='Sex', anchor='center')
  167. tvCriminals.column('#3', width=50, anchor='center', stretch=True)
  168.  
  169. tvCriminals.heading('#4', text='Age', anchor='center')
  170. tvCriminals.column('#4', width=50, anchor='center', stretch=True)
  171.  
  172. tvCriminals.heading('#5', text='Offense', anchor='center')
  173. tvCriminals.column('#5', width=200, anchor='center', stretch=True)
  174.  
  175. #bind the treeview to the function show_selected_record
  176. tvCriminals.bind("<<TreeviewSelect>>", show_selected_record)
  177.  
  178. tvCriminals.grid(row=10, column=0, columnspan=2)
  179.  
  180. #call main loop
  181. root.mainloop()
  182.  
  183.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement