Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
9 views

Python Notes (Core+Adv)

Uploaded by

cojax55917
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

Python Notes (Core+Adv)

Uploaded by

cojax55917
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 90

STUDENT MANAGEMENT SYSTEM

from tkinter import*


from tkinter import ttk
from tkinter import messagebox
from tkcalendar import DateEntry
import pymysql
from datetime import datetime

r=Tk()
r.state('zoomed')
heading=Label(r,text="STUDENT MANAGEMENT SYSTEM",font=('Arial',30,'bold'),border=12,relief=GROOVE,bg='lightgray')
heading.pack(side=TOP,fill=X)

Details=LabelFrame(r,text="Enter Details",font=('Arial',20,'bold'),border=12,relief=GROOVE,bg='lightgray')
Details.place(x=20,y=100,height=560,width=420)

Data=Frame(r, bd=12, relief=GROOVE, bg="lightgray")


Data.place(x=440 , y=100, width=890, height=575)

def create_connection():
return pymysql.connect(
host="localhost",database="Om",password="Omtayal@1980",port=3306, user="root")

def clear():
Entry_RollNo.delete(0,END)
Entry_Name.delete(0,END)
Entry_Class.delete(0,END)
Entry_Section.delete(0,END)
Entry_Contact.delete(0,END)
Entry_Father.delete(0,END)
Entry_Mother.delete(0,END)
Combobox_Gender.set("")
current_date = datetime.now().strftime("%d/%m/%Y")
dob.set(current_date)

def insert_data(Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB):
conn=create_connection()
cursor=conn.cursor()
args=Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB
query="INSERT INTO SmS (Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB) values
(%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(query,args)
conn.commit()
messagebox.showinfo("Data Inserted", "Entered Data is Inserted Successfully!!", icon ='info')
conn.close()

def add():

insert_data(rollno.get(),name.get(),class_var.get(),section.get(),contact.get(),father.get(),mother.get(),gender.g
et(),dob.get())

def update():
conn = create_connection()
cursor = conn.cursor()
query = "UPDATE SmS SET Name=%s, Class=%s, Section=%s, Contact=%s, Father_Name=%s, Mother_Name=%s, Gender=%s,
DOB=%s WHERE Roll_No=%s"
args = (name.get(), class_var.get(), section.get(), contact.get(), father.get(), mother.get(), gender.get(),
dob.get(), rollno.get())
cursor.execute(query, args)
conn.commit()
messagebox.showinfo("Data Updated", "Data is Updated Successfully for the Entered Roll No.!!", icon='info')
conn.close()

def delete():
conn = create_connection()
cursor = conn.cursor()
query = "DELETE from SmS WHERE Roll_No=%s"
cursor.execute(query, (rollno.get(),))
conn.commit()
messagebox.showinfo("Data Deleted", "Data is Deleted Successfully for the Entered Roll No.!!", icon='info')
conn.close()

# Variables
rollno = StringVar()
name = StringVar()
class_var = StringVar()
section = StringVar()
contact = StringVar()
father = StringVar()
mother = StringVar()
gender = StringVar()
dob = StringVar()
search_box = StringVar()

# Entry widget
Label_RollNo = Label(Details, text="Roll No.", font=("Times new roman", 15), bg="lightgray")
Label_RollNo.grid(row=0, column=0, padx=2, pady=2)
Entry_RollNo = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray",textvariable=rollno)
Entry_RollNo.grid(row=0, column=1, padx=2, pady=2)

Label_Name = Label(Details, text="Name", font=("Times new roman", 15), bg="lightgray")


Label_Name.grid(row=1, column=0, padx=2, pady=2)
Entry_Name = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray", textvariable=name)
Entry_Name.grid(row=1, column=1, padx=2, pady=2)

Label_Class = Label(Details, text="Class", font=("Times new roman", 15), bg="lightgray")


Label_Class.grid(row=2, column=0, padx=2, pady=2)
Entry_Class = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray", textvariable=class_var)
Entry_Class.grid(row=2, column=1, padx=2, pady=2)

Label_Section = Label(Details, text="Section", font=("Times new roman", 15), bg="lightgray")


Label_Section.grid(row=3, column=0, padx=2, pady=2)
Entry_Section = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray", textvariable=section)
Entry_Section.grid(row=3, column=1, padx=2, pady=2)

Label_Contact = Label(Details, text="Contact No.", font=("Times new roman", 15), bg="lightgray")


Label_Contact.grid(row=4, column=0, padx=2, pady=2)
Entry_Contact = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray", textvariable=contact)
Entry_Contact.grid(row=4, column=1, padx=2, pady=2)

Label_Father = Label(Details, text="Father's Name", font=("Times new roman", 15), bg="lightgray")


Label_Father.grid(row=6, column=0, padx=2, pady=2)
Entry_Father = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray",textvariable=father)
Entry_Father.grid(row=6, column=1, padx=2, pady=2)

Label_Mother = Label(Details, text="Mother's Name", font=("Times new roman", 15), bg="lightgray")


Label_Mother.grid(row=7, column=0, padx=2, pady=2)
Entry_Mother = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray", textvariable=mother)
Entry_Mother.grid(row=7, column=1, padx=2, pady=2)

Label_Gender = Label(Details, text="Gender", font=("Times new roman", 15), bg="lightgray")


Label_Gender.grid(row=8, column=0, padx=2, pady=2)
Combobox_Gender = ttk.Combobox(Details, font=("Times new roman", 15), width=23,
textvariable=gender,state="readonly")
Combobox_Gender["values"] = ("Male", "Female", "Other")
Combobox_Gender.grid(row=8, column=1, padx=2, pady=2)

Label_DOB = Label(Details, text="D.O.B", font=("Times new roman", 15), bg="lightgray")


Label_DOB.grid(row=9, column=0, padx=2, pady=2)
dob_calendar = DateEntry(Details, font=("Times new roman", 15), width=23,
date_pattern='dd/mm/yyyy',textvariable=dob)
dob_calendar.grid(row=9, column=1, padx=2, pady=2)

#buttons
Frame_Btn = Frame(Details, bg="lightgray", bd=7, relief=GROOVE)
Frame_Btn.place(x=15, y=390, width=348, height=120)

Add_Button = Button(Frame_Btn, bg="lightgray", text="Add", bd=7, font=("Times new roman", 15),


width=13,command=add)
Add_Button.grid(row=0, column=0, padx=2, pady=2)
Delete_Button = Button(Frame_Btn, bg="lightgray", text="Delete", bd=7, font=("Times new roman", 15),
width=13,command=delete)
Delete_Button.grid(row=0, column=1, padx=2, pady=2)

Update_Button = Button(Frame_Btn, bg="lightgray", text="Update", bd=7, font=("Times new roman", 15),


width=13,command=update)
Update_Button.grid(row=1, column=0, padx=2, pady=2)

Clear_Button = Button(Frame_Btn, bg="lightgray", text="Clear", bd=7, font=("Times new roman", 15),


width=13,command=clear)
Clear_Button.grid(row=1, column=1, padx=2, pady=2)

def fetch_data():
conn = create_connection()
cursor = conn.cursor()
query = "SELECT * FROM SmS"
cursor.execute(query)
rows = cursor.fetchall()
conn.close()
return rows

def populate_table():
records = fetch_data()
for record in records:
Student_table.insert('', 'end', values=record)

def search_records():
search_query = search_box.get().lower()
conn = create_connection()
cursor = conn.cursor()
query = "SELECT * FROM SmS"
cursor.execute(query)
rows = cursor.fetchall()
conn.close()
clear_table()
for row in rows:
# Check if the search query is present in any field of the record
if any(search_query in field.lower() for field in row):
Student_table.insert('', 'end', values=row)

def show_all_records():
clear_table()
populate_table()

def clear_table():
records = Student_table.get_children()
for record in records:
Student_table.delete(record)

Frame_Data = Frame(r, bd=12, relief=GROOVE, bg="lightgray")


Frame_Data.place(x=440 , y=100, width=890, height=575)

# Search Frame
Frame_Search = Frame(Frame_Data, bg="lightgray" , bd=10, relief=GROOVE)
Frame_Search.pack(side=TOP, fill=X)

Label_Search = Label(Frame_Search, text="Search Box", bg="lightgray", font=("Times new roman", 16))


Label_Search.grid(row=0, column=0, padx=12, pady=2)

Search_Entry = Entry(Frame_Search, font=("Times new roman", 16), textvariable=search_box)


Search_Entry.grid(row=0, column=1, padx=12, pady=2)

Search_Button = Button(Frame_Search, bg="lightgray", text="Search", bd=7, font=("Times new roman", 15), width=14,
command=search_records)
Search_Button.grid(row=0, column=2, padx=12, pady=2)

Refresh_Button = Button(Frame_Search, bg="lightgray", text="Refresh", bd=7, font=("Times new roman", 15),


width=14,command=show_all_records)
Refresh_Button.grid(row=0, column=3, padx=12, pady=2)

# Database Frame
Frame_Database = Frame(Frame_Data, bg="lightgray", bd=11, relief=GROOVE)
Frame_Database.pack(fill=BOTH, expand=True)

# Create Scrollbars
Scroll_X = Scrollbar(Frame_Database, orient=HORIZONTAL)
Scroll_Y = Scrollbar(Frame_Database, orient=VERTICAL)

# Create Treeview widget


Student_table = ttk.Treeview(Frame_Database, columns=('Roll No.','Name','Class','Section','Contact No.',"Father's
Name","Mother's Name", 'Gender', 'DOB'), yscrollcommand= Scroll_Y.set,xscrollcommand= Scroll_X.set)

# Set scrollbar configurations


Scroll_X.config(command=Student_table.xview)
Scroll_X.pack(side=BOTTOM, fill=X)
Scroll_Y.config(command=Student_table.yview)
Scroll_Y.pack(side=RIGHT, fill=Y)

# Set column headings


Student_table.heading("Roll No.", text="Roll No.")
Student_table.heading("Name", text="Name")
Student_table.heading("Class", text="Class")
Student_table.heading("Section", text="Section")
Student_table.heading("Contact No.", text="Contact No.")
Student_table.heading("Father's Name", text="Father's Name")
Student_table.heading("Mother's Name", text="Mother's Name")
Student_table.heading("Gender", text="Gender")
Student_table.heading("DOB", text="D.O.B")

# Set columns width


Student_table['show']='headings'
Student_table.column("Roll No.",width= 100)
Student_table.column("Name",width= 100)
Student_table.column("Class",width= 100)
Student_table.column("Section",width= 100)
Student_table.column("Contact No.",width= 100)
Student_table.column("Father's Name",width= 100)
Student_table.column("Mother's Name",width= 150)
Student_table.column("Gender",width= 150)
Student_table.column("DOB",width= 150)

# Pack the Treeview widget


Student_table.pack(fill=BOTH, expand=True)

# Populate table
populate_table()

mainloop()
EXPLANATION
```python
from tkinter import*
from tkinter import ttk
from tkinter import messagebox
from tkcalendar import DateEntry
import pymysql
from datetime import datetime
```
- `from tkinter import*`: Yeh statement tkinter module ke sabhi classes aur functions ko import karta hai.
- `from tkinter import ttk`: Yeh ttk (themed tkinter) module ko import karta hai, jo modern widgets provide karta hai tkinter ke liye.
- `from tkinter import messagebox`: Yeh messagebox ko import karta hai, jo dialogs aur messages display karne ke liye use hota hai.
- `from tkcalendar import DateEntry`: Yeh DateEntry widget ko import karta hai, jo date picker provide karta hai.
- `import pymysql`: Yeh pymysql module ko import karta hai, jo MySQL database ke sath interaction ke liye use hota hai.
- `from datetime import datetime`: Yeh datetime module se datetime class ko import karta hai, jo date aur time ko handle karne ke liye use hota hai.

```python
r=Tk()
r.state('zoomed')
```
- `r=Tk()`: Yeh ek tkinter window create karta hai.
- `r.state('zoomed')`: Yeh window ko fullscreen mode mein set karta hai.

```python
heading=Label(r,text="STUDENT MANAGEMENT SYSTEM",font=('Arial',30,'bold'),border=12,relief=GROOVE,bg='lightgray')
heading.pack(side=TOP,fill=X)
```
- `heading=Label(...)`: Yeh ek label widget create karta hai jisme "STUDENT MANAGEMENT SYSTEM" likha hota hai.
- `heading.pack(side=TOP,fill=X)`: Yeh label ko window ke top par place karta hai aur horizontal fill karta hai.

```python
Details=LabelFrame(r,text="Enter Details",font=('Arial',20,'bold'),border=12,relief=GROOVE,bg='lightgray')
Details.place(x=20,y=100,height=560,width=420)
```
- `Details=LabelFrame(...)`: Yeh ek labeled frame create karta hai jisme user details enter karne ke liye fields hote hain.
- `Details.place(x=20,y=100,height=560,width=420)`: Yeh frame ko window mein specific position aur size par place karta hai.

```python
Data=Frame(r, bd=12, relief=GROOVE, bg="lightgray")
Data.place(x=440 , y=100, width=890, height=575)
```
- `Data=Frame(...)`: Yeh ek frame create karta hai jisme data display hota hai.
- `Data.place(x=440 , y=100, width=890, height=575)`: Yeh frame ko window mein specific position aur size par place karta hai.

```python
def create_connection():
return pymysql.connect(
host="localhost",database="Om",password="Omtayal@1980",port=3306, user="root")
```
- `create_connection()`: Yeh ek function hai jo MySQL database se connection establish karta hai.

```python
def clear():
Entry_RollNo.delete(0,END)
Entry_Name.delete(0,END)
Entry_Class.delete(0,END)
Entry_Section.delete(0,END)
Entry_Contact.delete(0,END)
Entry_Father.delete(0,END)
Entry_Mother.delete(0,END)
Combobox_Gender.set("")
current_date = datetime.now().strftime("%d/%m/%Y")
dob.set(current_date)
```
- `clear()`: Yeh function sabhi entry fields ko clear karta hai aur Gender aur DOB ko reset karta hai.

```python
def insert_data(Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB):
conn=create_connection()
cursor=conn.cursor()
args=Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB
query="INSERT INTO SmS (Roll_No, Name, Class, Section, Contact, Father_Name, Mother_Name, Gender, DOB) values
(%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(query,args)
conn.commit()
messagebox.showinfo("Data Inserted", "Entered Data is Inserted Successfully!!", icon ='info')
conn.close()
```
- `insert_data(...)`: Yeh function database mein naye data ko insert karta hai.

```python
def add():

insert_data(rollno.get(),name.get(),class_var.get(),section.get(),contact.get(),father.get(),mother.get(),gender.g
et(),dob.get())
```
- `add()`: Yeh function user ke dawara enter kiya gaya data ko insert karta hai.

```python
def update():
conn = create_connection()
cursor = conn.cursor()
query = "UPDATE SmS SET Name=%s, Class=%s, Section=%s, Contact=%s, Father_Name=%s, Mother_Name=%s, Gender=%s,
DOB=%s WHERE Roll_No=%s"
args = (name.get(), class_var.get(), section.get(), contact.get(), father.get(), mother.get(), gender.get(),
dob.get(), rollno.get())
cursor.execute(query, args)
conn.commit()
messagebox.showinfo("Data Updated", "Data is Updated Successfully for the Entered Roll No.!!", icon='info')
conn.close()
```
- `update()`: Yeh function database mein existing data ko update karta hai.

```python
def delete():
conn = create_connection()
cursor = conn.cursor()
query = "DELETE from SmS WHERE Roll_No=%s"
cursor.execute(query, (rollno.get(),))
conn.commit()
messagebox.showinfo("Data Deleted", "Data is Deleted Successfully for the Entered Roll No.!!", icon='info')
conn.close()
```
- `delete()`: Yeh function database mein se data ko delete karta hai.

```python
rollno = StringVar()
name = StringVar()
class_var = StringVar()
section = StringVar()
contact = StringVar()
father = StringVar()
mother = StringVar()
gender = StringVar()
dob = StringVar()
search_box = StringVar()
```
- Yeh variables hain jo user ke dawara enter kiye gaye data ko store karte hain. `StringVar()` ka use tkinter widgets ke sath data ko bind karne ke liye hota
hai.

```python
Label_RollNo = Label(Details, text="Roll No.", font=("Times new roman", 15), bg="lightgray")
Label_RollNo.grid(row=0, column=0, padx=2, pady=2)
```
- Yeh ek label widget create karta hai jisme "Roll No." likha hota hai aur Details frame mein place karta hai.

```python
Entry_RollNo = Entry(Details,bd=7, font= ("Times new roman", 15),width=24,bg="lightgray",textvariable=rollno)
Entry_RollNo.grid(row=0, column=1, padx=2, pady=2)
```
- Yeh ek entry widget create karta hai jisme user apna Roll No. enter kar sakta hai aur uska value `rollno` variable mein store hota hai.
```python
Label_Gender = Label(Details, text="Gender", font=("Times new roman", 15), bg="lightgray")
Label_Gender.grid(row=8, column=0, padx=2, pady=2)
```
- `Label_Gender`: Yeh ek label widget create karta hai jisme "Gender" likha hota hai. Ye label Details frame ke andar position kiya jata hai. Iska font size 15
aur background light gray hota hai.

```python
Combobox_Gender = ttk.Combobox(Details, font=("Times new roman", 15), width=23,
textvariable=gender,state="readonly")
Combobox_Gender["values"] = ("Male", "Female", "Other")
Combobox_Gender.grid(row=8, column=1, padx=2, pady=2)
```
- `Combobox_Gender`: Yeh ek ttk Combobox widget create karta hai jisme user gender select kar sakta hai. Iska font size 15 aur width 23 hota hai.
`textvariable` attribute se `gender` variable ko bind kiya jata hai jo user ka selection store karta hai.
- `"values"` attribute ke through, combobox mein options set kiye jate hain, jaise "Male", "Female", aur "Other".
- `state="readonly"` se combobox ko read-only mode mein set kiya jata hai, jisse user directly text enter na kar sake, sirf dropdown se options select kar
sake.
```python
dob_calendar = DateEntry(Details, font=("Times new roman", 15), width=23,
date_pattern='dd/mm/yyyy',textvariable=dob)
dob_calendar.grid(row=9, column=1, padx=2, pady=2)
```
- Yeh ek DateEntry widget create karta hai jisme user apni Date of Birth (DOB) select kar sakta hai aur uska value `dob` variable mein store hota hai.

```python
Add_Button = Button(Frame_Btn, bg="lightgray", text="Add", bd=7, font=("Times new roman", 15),
width=13,command=add)
Add_Button.grid(row=0, column=0, padx=2, pady=2)
```
- Yeh ek button widget create karta hai jiska label "Add" hota hai aur jab is par click kiya jata hai to `add()` function call hota hai.

```python
def fetch_data():
conn = create_connection()
cursor = conn.cursor()
query = "SELECT * FROM SmS"
cursor.execute(query)
rows = cursor.fetchall()
conn.close()
return rows
```
- Yeh ek function hai jo database se data fetch karta hai aur use ek list mein store karke return karta hai.

```python
def populate_table():
records = fetch_data()
for record in records:
Student_table.insert('', 'end', values=record)
```
- Yeh ek function hai jo database se fetch kiya gaya data ko table mein display karta hai.

```python
def search_records():
search_query = search_box.get().lower()
conn = create_connection()
cursor = conn.cursor()
query = "SELECT * FROM SmS"
cursor.execute(query)
rows = cursor.fetchall()
conn.close()
clear_table()
for row in rows:
# Dekhta hai ki kya search query kisi bhi record ke kisi field mein hai
if any(search_query in field.lower() for field in row):
Student_table.insert('', 'end', values=row)
```
- `search_records()`: Jab user "Search" button par click karta hai, toh yeh function trigger hota hai. Ismein user dwara enter kiye gaye search query ko fetch
kiya jata hai, fir database se connect kiya jata hai, "SmS" table se sabhi records ko SELECT query ke zariye fetch kiya jata hai, aur phir saare rows fetch kiye
jate hain. Fir, GUI mein dikhaye gaye table ko `clear_table()` function se clear kiya jata hai. Uske baad, har row ko iterate kiya jata hai aur dekha jata hai ki
kya search query kisi bhi record ke kisi field ke sath match hota hai. Agar match hota hai, toh woh record `Student_table` mein insert ki jati hai.
```python
def show_all_records():
clear_table()
populate_table()
```
- `show_all_records()`: Jab user "Refresh" button par click karta hai, toh yeh function trigger hota hai. Ismein GUI mein dikhaye gaye table ko `clear_table()`
function se clear kiya jata hai, aur fir saare records ko database se `populate_table()` function ke zariye fetch kiya jata hai aur table mein display kiya jata
hai.

```python
def clear_table():
records = Student_table.get_children()
for record in records:
Student_table.delete(record)
```
- `clear_table()`: Yeh function GUI mein dikhaye gaye table ko saaf karne ke liye zimmedar hai. Ismein `Student_table` widget ke saare bachche items (rows)
ko `get_children()` method ka istemal karke fetch kiya jata hai. Fir, har record par iterate kiya jata hai aur `delete()` method ka istemal karke use delete kiya
jata hai.

```python
Frame_Data = Frame(r, bd=12, relief=GROOVE, bg="lightgray")
Frame_Data.place(x=440 , y=100, width=890, height=575)
```
- `Frame_Data`: Yeh line mukhya window (`r`) ke andar ek frame (`Frame_Data`) ko banata hai. Ismein border width ko 12, relief style ko GROOVE, aur
background color ko light gray set kiya gaya hai. `place()` method ka istemal kiya jata hai frame ke andar exact position aur dimensions ko specify karne ke
liye.

```python
# Search Frame
Frame_Search = Frame(Frame_Data, bg="lightgray" , bd=10, relief=GROOVE)
Frame_Search.pack(side=TOP, fill=X)
```
- `Frame_Search`: Yeh part ek aur frame (`Frame_Search`) ko `Frame_Data` frame ke andar banata hai. Ismein background color ko light gray, border width
ko 10, aur relief style ko GROOVE set kiya gaya hai. `pack()` method ka istemal kiya gaya hai frame ko top par (`side=TOP`) pack karne ke liye aur horizontal
space ko pura fill karne ke liye (`fill=X`) uske parent frame ke andar.

```python
Label_Search = Label(Frame_Search, text="Search Box", bg="lightgray", font=("Times new roman", 16))
Label_Search.grid(row=0, column=0, padx=12, pady=2)

Search_Entry = Entry(Frame_Search, font=("Times new roman", 16), textvariable=search_box)


Search_Entry.grid(row=0, column=1, padx=12, pady=2)

Search_Button = Button(Frame_Search, bg="lightgray", text="Search", bd=7, font=("Times new roman", 15), width=14,
command=search_records)
Search_Button.grid(row=0, column=2, padx=12, pady=2)

Refresh_Button = Button(Frame_Search, bg="lightgray", text="Refresh", bd=7, font=("Times new roman", 15),


width=14,command=show_all_records)
Refresh_Button.grid(row=0, column=3, padx=12, pady=2)
```
- Ye lines `Frame_Search` frame ke andar search interface ko create karte hain. Ismein ek label ("Search Box"), ek entry widget (`Search_Entry`) jahan users
apne search queries likh sakte hain, ek "Search" button (`Search_Button`) jo search process ko shuru karne ke liye hota hai, aur ek "Refresh" button
(`Refresh_Button`) jo sabhi records ko reset aur phir se dikhane ke liye hota hai. Ye sab widgets frame ke andar grid layout mein `grid()` method ka istemal
karke rakhe gaye hain. `padx` aur `pady` parameters widgets ke aas paas padding ko specify karte hain.

```python
# Database Frame
Frame_Database = Frame(Frame_Data, bg="lightgray", bd=11, relief=GROOVE)
Frame_Database.pack(fill=BOTH, expand=True)
```
- Yeh code ek frame (`Frame_Database`) ko banaata hai jo mukhya frame (`Frame_Data`) ke andar hota hai. Is frame mein Treeview widget
(`Student_table`) ko display karne ke liye banaya gaya hai. Ismein background color light gray set kiya gaya hai, border width 11 aur relief style GROOVE hai.

```python
# Create Scrollbars
Scroll_X = Scrollbar(Frame_Database, orient=HORIZONTAL)
Scroll_Y = Scrollbar(Frame_Database, orient=VERTICAL)
```
- Yeh code horizontal aur vertical scrollbars (`Scroll_X` aur `Scroll_Y`) ko `Frame_Database` ke andar banata hai taaki database mein dikhaye gaye data ko
scroll kiya ja sake.

```python
# Create Treeview widget
Student_table = ttk.Treeview(Frame_Database, columns=('Roll No.','Name','Class','Section','Contact No.',"Father's
Name","Mother's Name", 'Gender', 'DOB'), yscrollcommand= Scroll_Y.set,xscrollcommand= Scroll_X.set)
```
- Yeh part code mein ek Treeview widget banata hai, jo `Frame_Database` ke andar hota hai. Is widget mein `columns` parameter se specified columns ka
configuration diya gaya hai, jismein har column ke liye ek unique identifier hai jaise 'Roll No.', 'Name', 'Class', 'Section', 'Contact No.', "Father's Name",
"Mother's Name", 'Gender', aur 'DOB'. `yscrollcommand` aur `xscrollcommand` attributes se y-axis aur x-axis par scrollbars ke sath sync kiya gaya hai.

```python
# Set scrollbar configurations
Scroll_X.config(command=Student_table.xview)
Scroll_X.pack(side=BOTTOM, fill=X)
Scroll_Y.config(command=Student_table.yview)
Scroll_Y.pack(side=RIGHT, fill=Y)
```
- Is hisse mein scrollbar configurations set ki gayi hai. `Scroll_X` scrollbar ke liye `xview()` method ko `Student_table` ke x-axis ke saath sync kiya gaya hai.
Phir `pack()` method se scrollbar ko `BOTTOM` position par aur `fill` parameter ke saath `X` direction mein display kiya gaya hai. Similarly, `Scroll_Y` scrollbar
ke liye `yview()` method ko `Student_table` ke y-axis ke saath sync kiya gaya hai. Phir `pack()` method se scrollbar ko `RIGHT` position par aur `fill`
parameter ke saath `Y` direction mein display kiya gaya hai.

```python
# Set column headings
Student_table.heading("Roll No.", text="Roll No.")
Student_table.heading("Name", text="Name")
Student_table.heading("Class", text="Class")
Student_table.heading("Section", text="Section")
Student_table.heading("Contact No.", text="Contact No.")
Student_table.heading("Father's Name", text="Father's Name")
Student_table.heading("Mother's Name", text="Mother's Name")
Student_table.heading("Gender", text="Gender")
Student_table.heading("DOB", text="D.O.B")
```
- Yeh code har column ke liye heading set karta hai jo Treeview mein display honge. Har heading ke liye ek unique identifier diya gaya hai aur text jo display
hoga woh bhi diya gaya hai.

```python
# Set columns width
Student_table['show']='headings'
Student_table.column("Roll No.",width= 100)
Student_table.column("Name",width= 100)
Student_table.column("Class",width= 100)
Student_table.column("Section",width= 100)
Student_table.column("Contact No.",width= 100)
Student_table.column("Father's Name",width= 100)
Student_table.column("Mother's Name",width= 150)
Student_table.column("Gender",width= 150)
Student_table.column("DOB",width= 150)
```
- Yeh code har column ke liye width set karta hai jo Treeview mein display honge. Column identifier ke sath width specify kiya gaya hai. Additionally, `show`
attribute ko `'headings'` value se set kiya gaya hai taaki column headings sirf show ho aur khali rows show na ho.

```python
# Pack the Treeview widget
Student_table.pack(fill=BOTH, expand=True)
```
- Yeh code Treeview widget (`Student_table`) ko `Frame_Database` ke andar pack karta hai taaki database se fetch kiya gaya data dikhaya ja sake. Ismein fill
aur expand parameters ko BOTH set kiya gaya hai taaki widget available space ko fill kare aur zarurat ke mutabiq expand ho sake.

```python
# Populate table
populate_table()
```
- Yeh code `populate_table()` function ko call karta hai taaki program start hone par table ko initially database ke records se populate kiya ja sake.

```python
mainloop()
```
- Yeh code tkinter ka event loop start karta hai, jo button clicks, key presses, aur mouse movements jaise events ko sunta hai aur unka jawab deta hai. Yeh
GUI window ko open aur responsive rakhta hai jab tak window ko band nahi kiya jata hai.

You might also like