· 4 years ago · Aug 17, 2021, 07:56 AM
1from tkinter import *
2import tkinter.ttk as ttk
3import tkinter.messagebox as tkMessageBox
4import sqlite3
5
6#function to define database
7def Database():
8 global conn, cursor
9 #creating student database
10 conn = sqlite3.connect("student.db")
11 cursor = conn.cursor()
12 #creating STUD_REGISTRATION table
13 cursor.execute(
14 "CREATE TABLE IF NOT EXISTS STUD_REGISTRATION (STU_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, STU_NAME TEXT, STU_CONTACT TEXT, STU_EMAIL TEXT, STU_ROLLNO TEXT, STU_BRANCH TEXT)")
15
16#defining function for creating GUI Layout
17def DisplayForm():
18 #creating window
19 display_screen = Tk()
20 #setting width and height for window
21 display_screen.geometry("1000x600")
22 #setting title for window
23 display_screen.title("Student Management System")
24 global tree
25 global SEARCH
26 global name,contact,email,roll,branch
27 SEARCH = StringVar()
28 name = StringVar()
29 contact = StringVar()
30 email = StringVar()
31 roll = StringVar()
32 branch = StringVar()
33 #creating frames for layout
34 #topview frame for heading
35 TopViewForm = Frame(display_screen, width=600, bd=1, relief=SOLID)
36 TopViewForm.pack(side=TOP, fill=X)
37 #first left frame for registration from
38 LFrom = Frame(display_screen, width="350")
39 LFrom.pack(side=LEFT, fill=Y)
40 #seconf left frame for search form
41 LeftViewForm = Frame(display_screen, width=500,bg="gray")
42 LeftViewForm.pack(side=LEFT, fill=Y)
43 #mid frame for displaying students record
44 MidViewForm = Frame(display_screen, width=600)
45 MidViewForm.pack(side=RIGHT)
46 #label for heading
47 lbl_text = Label(TopViewForm, text="Student Management System", font=('verdana', 18), width=600,bg="#1C2833",fg="white")
48 lbl_text.pack(fill=X)
49 #creating registration form in first left frame
50 Label(LFrom, text="Name ", font=("Arial", 12)).pack(side=TOP)
51 Entry(LFrom,font=("Arial",10,"bold"),textvariable=name).pack(side=TOP, padx=10, fill=X)
52 Label(LFrom, text="Contact ", font=("Arial", 12)).pack(side=TOP)
53 Entry(LFrom, font=("Arial", 10, "bold"),textvariable=contact).pack(side=TOP, padx=10, fill=X)
54 Label(LFrom, text="Email ", font=("Arial", 12)).pack(side=TOP)
55 Entry(LFrom, font=("Arial", 10, "bold"),textvariable=email).pack(side=TOP, padx=10, fill=X)
56 Label(LFrom, text="Rollno ", font=("Arial", 12)).pack(side=TOP)
57 Entry(LFrom, font=("Arial", 10, "bold"), textvariable=roll).pack(side=TOP, padx=10, fill=X)
58 Label(LFrom, text="Branch ", font=("Arial", 12)).pack(side=TOP)
59 Entry(LFrom, font=("Arial", 10, "bold"),textvariable=branch).pack(side=TOP, padx=10, fill=X)
60 Button(LFrom,text="Submit",font=("Arial", 10, "bold"),command=register).pack(side=TOP, padx=10,pady=5, fill=X)
61
62 #creating search label and entry in second frame
63 lbl_txtsearch = Label(LeftViewForm, text="Enter name to Search", font=('verdana', 10),bg="gray")
64 lbl_txtsearch.pack()
65 #creating search entry
66 search = Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15), width=10)
67 search.pack(side=TOP, padx=10, fill=X)
68 #creating search button
69 btn_search = Button(LeftViewForm, text="Search", command=SearchRecord)
70 btn_search.pack(side=TOP, padx=10, pady=10, fill=X)
71 #creating view button
72 btn_view = Button(LeftViewForm, text="View All", command=DisplayData)
73 btn_view.pack(side=TOP, padx=10, pady=10, fill=X)
74 #creating reset button
75 btn_reset = Button(LeftViewForm, text="Reset", command=Reset)
76 btn_reset.pack(side=TOP, padx=10, pady=10, fill=X)
77 #creating delete button
78 btn_delete = Button(LeftViewForm, text="Delete", command=Delete)
79 btn_delete.pack(side=TOP, padx=10, pady=10, fill=X)
80 #setting scrollbar
81 scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
82 scrollbary = Scrollbar(MidViewForm, orient=VERTICAL)
83 tree = ttk.Treeview(MidViewForm,columns=("Student Id", "Name", "Contact", "Email","Roll","Branch"),
84 selectmode="extended", height=100, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)
85 scrollbary.config(command=tree.yview)
86 scrollbary.pack(side=RIGHT, fill=Y)
87 scrollbarx.config(command=tree.xview)
88 scrollbarx.pack(side=BOTTOM, fill=X)
89 #setting headings for the columns
90 tree.heading('Student Id', text="Student Id", anchor=W)
91 tree.heading('Name', text="Name", anchor=W)
92 tree.heading('Contact', text="Contact", anchor=W)
93 tree.heading('Email', text="Email", anchor=W)
94 tree.heading('Roll', text="Roll", anchor=W)
95 tree.heading('Branch', text="Branch", anchor=W)
96 #setting width of the columns
97 tree.column('#0', stretch=NO, minwidth=0, width=0)
98 tree.column('#1', stretch=NO, minwidth=0, width=100)
99 tree.column('#2', stretch=NO, minwidth=0, width=150)
100 tree.column('#3', stretch=NO, minwidth=0, width=80)
101 tree.column('#4', stretch=NO, minwidth=0, width=120)
102 tree.pack()
103 DisplayData()
104#function to insert data into database
105def register():
106 Database()
107 #getting form data
108 name1=name.get()
109 con1=contact.get()
110 email1=email.get()
111 rol1=roll.get()
112 branch1=branch.get()
113 #applying empty validation
114 if name1=='' or con1==''or email1=='' or rol1==''or branch1=='':
115 tkMessageBox.showinfo("Warning","fill the empty field!!!")
116 else:
117 #execute query
118 conn.execute('INSERT INTO STUD_REGISTRATION (STU_NAME,STU_CONTACT,STU_EMAIL,STU_ROLLNO,STU_BRANCH) \
119 VALUES (?,?,?,?,?)',(name1,con1,email1,rol1,branch1));
120 conn.commit()
121 tkMessageBox.showinfo("Message","Stored successfully")
122 #refresh table data
123 DisplayData()
124 conn.close()
125
126def Reset():
127 #clear current data from table
128 tree.delete(*tree.get_children())
129 #refresh table data
130 DisplayData()
131 #clear search text
132 SEARCH.set("")
133 name.set("")
134 contact.set("")
135 email.set("")
136 roll.set("")
137 branch.set("")
138def Delete():
139 #open database
140 Database()
141 if not tree.selection():
142 tkMessageBox.showwarning("Warning","Select data to delete")
143 else:
144 result = tkMessageBox.askquestion('Confirm', 'Are you sure you want to delete this record?',
145 icon="warning")
146 if result == 'yes':
147 curItem = tree.focus()
148 contents = (tree.item(curItem))
149 selecteditem = contents['values']
150 tree.delete(curItem)
151 cursor=conn.execute("DELETE FROM STUD_REGISTRATION WHERE STU_ID = %d" % selecteditem[0])
152 conn.commit()
153 cursor.close()
154 conn.close()
155
156#function to search data
157def SearchRecord():
158 #open database
159 Database()
160 #checking search text is empty or not
161 if SEARCH.get() != "":
162 #clearing current display data
163 tree.delete(*tree.get_children())
164 #select query with where clause
165 cursor=conn.execute("SELECT * FROM STUD_REGISTRATION WHERE STU_NAME LIKE ?", ('%' + str(SEARCH.get()) + '%',))
166 #fetch all matching records
167 fetch = cursor.fetchall()
168 #loop for displaying all records into GUI
169 for data in fetch:
170 tree.insert('', 'end', values=(data))
171 cursor.close()
172 conn.close()
173#defining function to access data from SQLite database
174def DisplayData():
175 #open database
176 Database()
177 #clear current data
178 tree.delete(*tree.get_children())
179 #select query
180 cursor=conn.execute("SELECT * FROM STUD_REGISTRATION")
181 #fetch all data from database
182 fetch = cursor.fetchall()
183 #loop for displaying all data in GUI
184 for data in fetch:
185 tree.insert('', 'end', values=(data))
186 cursor.close()
187 conn.close()
188
189#calling function
190DisplayForm()
191if __name__=='__main__':
192#Running Application
193 mainloop()