PYTHON PROJECT ( Building a Student Attendance Checker App in Python Using Tkinter )

Introduction:

Managing student attendance is one of the crucial aspects of any classroom or educational setting. Keeping track of who’s present and who’s not can become challenging, especially when done manually. This inspired me to develop a Python-based student attendance checker using Tkinter. In this blog, I’ll share the full source code, explain how it works, and even discuss potential features you can add to enhance its functionality.

This project is a simple yet powerful tool that can be useful for teachers, educational institutions, or even parents who homeschool their children. If you’re looking to learn Python, Tkinter, or just automate tedious tasks, this project is perfect for you!


Project Description:

The attendance checker app takes a list of students’ names and compares it against a pre-defined list for each class section (like Section A or Section B). The app then identifies any students missing from the input list. The user interface is designed using Tkinter, making it intuitive and user-friendly.

Key Features:

  • Dropdown menu to select different sections.
  • Input box to paste student names.
  • Output box displays missing student names with checkboxes for marking them.
  • Clear button to reset inputs and outputs.
  • Total absent student count displayed dynamically.

This app can be used as-is or further extended to add more functionality.


Full Code:

Below is the complete code for the student attendance checker app. I’ve included detailed comments for each section to help you understand how it works.

import tkinter as tk
from tkinter import ttk, messagebox
from PIL import Image, ImageTk


def convert_vertical_to_horizontal(input_string):
    return ', '.join(line.strip() for line in input_string.split('\n') if line.strip())


def replace_backslashes(input_list, replacement_char):
    return [item.replace('\\', replacement_char).upper() for item in input_list]


def check_missing_from_input(input_data, dictionary):
    dictionary = [item.upper() for item in dictionary]
    input_data = [item.upper() for item in input_data]
    return [item for item in dictionary if item not in input_data and item.replace('>', '\\') not in input_data]


def on_check_missing():
    user_input = input_box.get("1.0", tk.END).strip()
    formatted_input = convert_vertical_to_horizontal(user_input)
    user_input_list = [item.strip() for item in formatted_input.split(',')]

    selected_section = section_var.get()
    if selected_section == "Section A":
        student_dictionary = section_a_students
    elif selected_section == "Section B":
        student_dictionary = section_b_students
    else:
        messagebox.showerror("Error", "Please select a valid Section.")
        return

    missing_from_input = check_missing_from_input(user_input_list, student_dictionary)

    # Clear previous content in output box
    output_box.delete("1.0", tk.END)

    if not missing_from_input:
        output_box.insert(tk.END, "All students are present in your input.\n", "success")
        missing_count_label.config(text="Total absent students: 0")
    else:
        for student in missing_from_input:
            var = tk.IntVar()
            checkbox = tk.Checkbutton(
                output_box,
                text=student,
                variable=var,
                bg="white",  # Background for the checkboxes
                fg="black",  # Text color
                anchor="w",
                selectimage=check_image,  # Use black check mark image
                image=empty_image,  # Show empty image when unchecked
                compound="left"
            )
            output_box.window_create(tk.END, window=checkbox)
            output_box.insert(tk.END, "\n")

        # Display total count of missing students
        missing_count_label.config(text=f"Total absent students: {len(missing_from_input)}")

    output_box.yview_moveto(0)


def clear_text_boxes():
    input_box.delete("1.0", tk.END)
    output_box.delete("1.0", tk.END)
    missing_count_label.config(text="Total absent students: 0")


root = tk.Tk()
root.title("Find absent Students")
root.geometry("500x650")
root.configure(bg="#2b2b2b")

section_a_students = [
        r"John",
    r"Virat",
    r"Emily",
    r"Raj",
    r"Alice",
    r"Zara",
    r"Leo",
    r"Priya",
    r"Mohammed",
    r"Olivia",
    r"Samuel",
    r"Ayesha",
    r"David",
    r"Sophia",
    r"Anil",
    r"Isabella",
    r"Karan",
    r"Ella",
    r"Aarav",
    r"Nina"

]

section_b_students = [
    r"Liam",
    r"Anika",
    r"Noah",
    r"Ravi",
    r"Ava",
    r"Sanjay",
    r"Mia",
    r"Riya",
    r"Ethan",
    r"Tara",
    r"Daniel",
    r"Isha",
    r"Lucas",
    r"Neha",
    r"James",
    r"Kavya",
    r"Benjamin",
    r"Manav",
    r"Grace",
    r"Aleena"
]

black_check_image = Image.new('RGB', (15, 15), "black")
empty_image = Image.new('RGBA', (15, 15), (255, 255, 255, 0))
check_image = ImageTk.PhotoImage(black_check_image)
empty_image = ImageTk.PhotoImage(empty_image)

bg_color = "#2b2b2b"
text_color = "#f0f0f0"
button_color = "#4c4c4c"
highlight_color = "#1c1c1c"
hover_color = "#3b3b3b"

heading = tk.Label(root, text="Check absent student", bg=bg_color, fg="cyan", font=("Arial", 14, "bold"),
                   relief="ridge", padx=5, pady=5)
heading.pack(pady=(10, 20))

section_var = tk.StringVar(value="Section B")

style = ttk.Style()
style.theme_use("clam")
style.configure("TMenubutton", background=button_color, foreground=text_color)
style.map("TMenubutton", background=[("active", hover_color)])

section_label = tk.Label(root, text="Select Section:", bg=bg_color, fg=text_color)
section_label.pack(pady=5)

section_dropdown = ttk.OptionMenu(root, section_var, "Section A", "Section B", "Section A")
section_dropdown.pack(pady=5)

instructions = tk.Label(root, text="Enter each student name on a new line:", bg=bg_color, fg="cyan")
instructions.pack(pady=10)

input_frame = tk.Frame(root, bg=bg_color)
input_box = tk.Text(input_frame, height=5, width=40, bg=highlight_color, fg=text_color, insertbackground="white",
                    relief="sunken", bd=3)
input_scrollbar = tk.Scrollbar(input_frame, command=input_box.yview)
input_box.configure(yscrollcommand=input_scrollbar.set)
input_box.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
input_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
input_frame.pack(pady=5)

check_button = tk.Button(root, text="Check absent Student", command=on_check_missing, bg=button_color, fg="yellow",
                         activebackground=highlight_color, relief="raised", bd=3)
check_button.pack(pady=10)

output_frame = tk.Frame(root, bg=bg_color)
output_box = tk.Text(output_frame, height=10, width=40, bg="white", fg="black", insertbackground="black",
                     relief="sunken", bd=3)
output_scrollbar = tk.Scrollbar(output_frame, command=output_box.yview)
output_box.configure(yscrollcommand=output_scrollbar.set)
output_box.tag_configure("success", foreground="green")
output_box.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
output_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
output_frame.pack(pady=5)

# Label to show the total count of missing students
missing_count_label = tk.Label(root, text="Total absent students: 0", bg=bg_color, fg="white",
                               font=("Arial", 10, "bold"))
missing_count_label.pack(pady=5)

clear_button = tk.Button(root, text="Clear", command=clear_text_boxes, bg=button_color, fg="red",
                         activebackground=highlight_color, relief="raised", bd=3)
clear_button.pack(pady=10)

root.mainloop()

How to Use:

  1. Download and install Python on your system if you haven’t already.
  2. Install the required Python modules (tkinter, PIL). bash code : pip install pillow
  3. Copy the code above into a .py file.
  4. Run the Python script.
  5. Select the appropriate section from the dropdown, enter the list of student names, and click “Check absent Student” to identify missing students.

“Building this project has been a game-changer for me as a System Analyst who is constantly looking for ways to automate repetitive tasks. The student attendance checker not only helped me streamline attendance tracking for my daughter’s homeschooling sessions but also gave me hands-on experience with Python and Tkinter. I highly recommend this project for anyone interested in learning automation and Python GUIs.

Vinod Gill

Vinod Gill

Coder


Discover more from Quickinfoz

Subscribe to get the latest posts sent to your email.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Quickinfoz

Subscribe now to keep reading and get access to the full archive.

Continue reading