Republic of the Philippines
University of Rizal System
Morong, Rizal
College of Engineering
Partners:
Harley Pacoli
Carl Jasper Rabi
Item No. 1
import tkinter as tk
class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Main Window")
self.name_label = tk.Label(master, text="Name:")
self.name_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
self.name_entry = tk.Entry(master)
self.name_entry.grid(row=0, column=1, padx=5, pady=5)
self.address_label = tk.Label(master, text="Address:")
self.address_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
self.address_entry = tk.Entry(master)
self.address_entry.grid(row=1, column=1, padx=5, pady=5)
self.contact_label = tk.Label(master, text="Contact Number:")
self.contact_label.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
self.contact_entry = tk.Entry(master)
self.contact_entry.grid(row=2, column=1, padx=5, pady=5)
self.email_label = tk.Label(master, text="Email:")
self.email_label.grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
self.email_entry = tk.Entry(master)
self.email_entry.grid(row=3, column=1, padx=5, pady=5)
self.button = tk.Button(master, text="Open Data Window", command=self.open_data_window)
self.button.grid(row=4, column=0, columnspan=2, pady=10)
def open_data_window(self):
name = self.name_entry.get()
address = self.address_entry.get()
contact = self.contact_entry.get()
email = self.email_entry.get()
DataWindow(self.master, name, address, contact, email)
class DataWindow:
def __init__(self, master, name, address, contact, email):
self.master = master
self.top = tk.Toplevel(master)
self.top.title("Data Window")
tk.Label(self.top, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=name).grid(row=0, column=1, padx=5, pady=5)
tk.Label(self.top, text="Address:").grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=address).grid(row=1, column=1, padx=5, pady=5)
tk.Label(self.top, text="Contact Number:").grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=contact).grid(row=2, column=1, padx=5, pady=5)
tk.Label(self.top, text="Email:").grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=email).grid(row=3, column=1, padx=5, pady=5)
def main():
root = tk.Tk()
app = MainWindow(root)
root.mainloop()
if _name_ == "_main_":
main()
Item No. 2
import tkinter as tk
class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Main Window")
self.name_label = tk.Label(master, text="Name:")
self.name_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
self.name_entry = tk.Entry(master)
self.name_entry.grid(row=0, column=1, padx=5, pady=5)
self.address_label = tk.Label(master, text="Address:")
self.address_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
self.address_entry = tk.Entry(master)
self.address_entry.grid(row=1, column=1, padx=5, pady=5)
self.contact_label = tk.Label(master, text="Contact Number:")
self.contact_label.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
self.contact_entry = tk.Entry(master)
self.contact_entry.grid(row=2, column=1, padx=5, pady=5)
self.email_label = tk.Label(master, text="Email:")
self.email_label.grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
self.email_entry = tk.Entry(master)
self.email_entry.grid(row=3, column=1, padx=5, pady=5)
self.button = tk.Button(master, text="Open Data Window", command=self.open_data_window)
self.button.grid(row=4, column=0, columnspan=2, pady=10)
def open_data_window(self):
name = self.name_entry.get()
address = self.address_entry.get()
contact = self.contact_entry.get()
email = self.email_entry.get()
DataWindow(self.master, name, address, contact, email)
class DataWindow:
def __init__(self, master, name, address, contact, email):
self.master = master
self.top = tk.Toplevel(master)
self.top.title("Data Window")
tk.Label(self.top, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=name).grid(row=0, column=1, padx=5, pady=5)
tk.Label(self.top, text="Address:").grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=address).grid(row=1, column=1, padx=5, pady=5)
tk.Label(self.top, text="Contact Number:").grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=contact).grid(row=2, column=1, padx=5, pady=5)
tk.Label(self.top, text="Email:").grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=email).grid(row=3, column=1, padx=5, pady=5)
def main():
root = tk.Tk()
app = MainWindow(root)
root.mainloop()
if _name_ == "_main_":
main()
Item No.3
import tkinter as tk
from tkinter import messagebox
pay_rates = {
"Manager": {"Grade A": 25000, "Grade B": 28000},
"System Administrator": {"Grade A": 20000, "Grade B": 23000},
"System Analyst": {"Grade A": 15000, "Grade B": 17000},
"Programmer": {"Grade A": 10000, "Grade B": 12000},
"Technician": {"Grade A": 8000, "Grade B": 9000},
"Encoder": {"Grade A": 6000, "Grade B": 6600},
"Messenger": {"Grade A": 5000, "Grade B": 5500}
}
tax_rates = {
"Manager": 20,
"System Administrator": 15,
"System Analyst": 12,
"Programmer": 10,
"Technician": 7,
"Encoder": 5,
"Messenger": 4
}
def compute_pay():
try:
position = position_var.get()
grade = grade_var.get()
basic_pay = pay_rates[position][grade]
tax_rate = tax_rates[position] / 100
overtime_pay = float(ot_hours_entry.get()) * 1 / 100 * basic_pay
gross_pay = basic_pay + overtime_pay
withholding_tax = float(tax_entry.get())
sss = 200
net_pay = float(net_entry.get())
total_deductions = sss + withholding_tax
net_pay_calculated = gross_pay - total_deductions
if net_pay != net_pay_calculated:
messagebox.showerror("Error", "Net Salary does not match the calculated value.")
return
messagebox.showinfo("Pay Slip",
f"Basic Pay: PHP {basic_pay}\nOvertime Pay: PHP {overtime_pay:.2f}\nGross Pay:
PHP {gross_pay:.2f}\nWithholding Tax: PHP {withholding_tax:.2f}\nTotal Deductions: PHP
{total_deductions:.2f}\nNet Pay: PHP {net_pay:.2f}")
except ValueError:
messagebox.showerror("Error", "Please enter valid numerical values")
def clear_data():
name_entry.delete(0, tk.END)
ot_hours_entry.delete(0, tk.END)
tax_entry.delete(0, tk.END)
net_entry.delete(0, tk.END)
gross_entry.delete(0, tk.END) # Clear Gross Salary entry field
def generate_printable_text():
employee_name = name_entry.get()
position = position_var.get()
grade = grade_var.get()
ot_hours = ot_hours_entry.get()
basic_salary = pay_rates[position][grade]
overtime_pay = float(ot_hours) * 1 / 100 * basic_salary
withholding_tax = float(tax_entry.get())
sss = 200
total_deductions = sss + withholding_tax
net_pay = basic_salary + overtime_pay - total_deductions
printable_text = f"Employee Name: {employee_name}\n" \
f"Position: {position}\n" \
f"Pay Grade Type: {grade}\n" \
f"OT Hours: {ot_hours}\n" \
f"OT Amount: {overtime_pay:.2f}\n" \
f"Basic Salary: {basic_salary}\n" \
f"SSS Contribution: {sss}\n" \
f"Withholding Tax: {withholding_tax:.2f}\n" \
f"Total Deductions: {total_deductions:.2f}\n" \
f"Net Income: {net_pay}"
return printable_text
def print_pay_slip():
printable_text = generate_printable_text()
messagebox.showinfo("Pay Slip", printable_text)
root = tk.Tk()
root.title("Pay Slip Application")
root.configure(bg='light blue')
# Set window size and position
window_width = 650
window_height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_coordinate = int((screen_width / 2) - (window_width / 2))
y_coordinate = int((screen_height / 2) - (window_height / 2))
root.geometry(f"{window_width}x{window_height}+{x_coordinate}+{y_coordinate}")
# Title
title_label = tk.Label(root, text="PAYSLIP", font=("Helvetica", 16, "bold"), bg='light blue')
title_label.pack(side=tk.TOP, pady=10)
# Pay Slip Frame
pay_slip_frame = tk.Frame(root, bg='white', bd=3, relief=tk.RIDGE)
pay_slip_frame.pack(pady=10)
# Left Side - User Input Fields
left_frame = tk.Frame(pay_slip_frame, bg='white')
left_frame.pack(side=tk.LEFT, padx=20)
tk.Label(left_frame, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
name_entry = tk.Entry(left_frame)
name_entry.grid(row=0, column=1, padx=5, pady=5)
tk.Label(left_frame, text="Position:").grid(row=1, column=0, padx=5, pady=5, sticky="w")
position_var = tk.StringVar(root)
position_var.set("Please Select")
position_menu = tk.OptionMenu(left_frame, position_var, "Manager", "System Administrator", "System
Analyst",
"Programmer", "Technician", "Encoder", "Messenger")
position_menu.grid(row=1, column=1, padx=5, pady=5)
tk.Label(left_frame, text="OT Hours:").grid(row=2, column=0, padx=5, pady=5, sticky="w")
ot_hours_entry = tk.Entry(left_frame)
ot_hours_entry.grid(row=2, column=1, padx=5, pady=5)
# Pay Grade Section
pay_grade_frame = tk.LabelFrame(left_frame, text="Pay Grade", bg='white', padx=10, pady=10)
pay_grade_frame.grid(row=3, columnspan=2, padx=5, pady=10, sticky="w")
grade_var = tk.StringVar()
grade_var.set("Grade A")
grade_a_radio = tk.Radiobutton(pay_grade_frame, text="Grade A", variable=grade_var, value="Grade
A")
grade_a_radio.pack(anchor=tk.W)
grade_b_radio = tk.Radiobutton(pay_grade_frame, text="Grade B", variable=grade_var, value="Grade
B")
grade_b_radio.pack(anchor=tk.W)
# Right Side - Additional Input Fields
right_frame = tk.Frame(pay_slip_frame, bg='white')
right_frame.pack(side=tk.RIGHT, padx=20)
tk.Label(right_frame, text="Gross Salary:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
gross_entry = tk.Entry(right_frame)
gross_entry.grid(row=0, column=1, padx=5, pady=5)
tk.Label(right_frame, text="Less:").grid(row=1, column=0, padx=5, pady=5, sticky="w")
tk.Label(right_frame, text="Tax:").grid(row=2, column=0, padx=5, pady=5, sticky="w")
tax_entry = tk.Entry(right_frame)
tax_entry.grid(row=2, column=1, padx=5, pady=5)
tk.Label(right_frame, text="SSS: 200").grid(row=3, column=0, padx=5, pady=5, sticky="w")
tk.Label(right_frame, text="Net Salary:").grid(row=4, column=0, padx=5, pady=5, sticky="w")
net_entry = tk.Entry(right_frame)
net_entry.grid(row=4, column=1, padx=5, pady=5)
# Buttons
bottom_frame = tk.Frame(root, bg='light blue')
bottom_frame.pack(side=tk.BOTTOM, pady=10)
compute_button = tk.Button(bottom_frame, text="Compute", command=compute_pay)
compute_button.pack(side=tk.LEFT, padx=10)
clear_button = tk.Button(bottom_frame, text="Clear", command=clear_data)
clear_button.pack(side=tk.LEFT, padx=10)
def generate_printable_text():
employee_name = name_entry.get()
position = position_var.get()
grade = grade_var.get()
ot_hours = ot_hours_entry.get()
basic_salary = pay_rates[position][grade]
overtime_pay = float(ot_hours) * 1 / 100 * basic_salary
withholding_tax = float(tax_entry.get())
sss = 200
total_deductions = sss + withholding_tax
net_pay = basic_salary + overtime_pay - total_deductions
printable_text = f"Employee Name: {employee_name}\n" \
f"Position: {position}\n" \
f"Pay Grade Type: {grade}\n" \
f"OT Hours: {ot_hours}\n" \
f"OT Amount: {overtime_pay:.2f}\n" \
f"Basic Salary: {basic_salary}\n" \
f"SSS Contribution: {sss}\n" \
f"Withholding Tax: {withholding_tax:.2f}\n" \
f"Total Deductions: {total_deductions:.2f}\n" \
f"Net Income: {net_pay}"
return printable_text
def print_pay_slip():
printable_text = generate_printable_text()
messagebox.showinfo("Pay Slip", printable_text)
print_button = tk.Button(bottom_frame, text="Print", command=print_pay_slip)
print_button.pack(side=tk.RIGHT, padx=10)
root.mainloop()