Untitled

 avatar
unknown
plain_text
5 months ago
4.2 kB
6
Indexable
def open_view_students_window():
    view_window = tk.Toplevel()
    view_window.title("View Students by Class")
    view_window.geometry("1000x450+400+250")  # Increased window height to fit delete button
    view_window.configure(bg='#506D85')

    school_classes = set(info['school_class'] for info in students.values())  # Prikupljamo sve klase u koje su studenti raspoređeni
    label = tk.Label(view_window, text="Select Class to View Students:", bg='#506D85', fg='white', font=FONT_MAIN)  # Kreiramo labelu
    label.pack(pady=10)  # Postavljamo labelu na ekran i dodajemo malo razmaka iznad

    selected_class = tk.StringVar(view_window)  # Kreiramo promenljivu koja će čuvati izabranu školsku klasu
    selected_class.set(next(iter(school_classes)))  # Postavljamo početnu vrednost na prvu klasu koja se nalazi u skupu
    class_dropdown = ttk.Combobox(view_window, textvariable=selected_class, values=list(school_classes))  # Kreiramo padajući meni
    class_dropdown.pack(pady=5)  # Postavljamo padajući meni na ekran i dodajemo malo razmaka ispod

    # Kreiramo tabelu za prikaz studenata
    tree = ttk.Treeview(view_window,
                        columns=("ID", "First Name", "Last Name", "Address", "Contact", "DOB"),  # Definišemo kolone
                        show='headings')  # Ova opcija znači da se ne prikazuje ID u prvom stupcu, već samo zaglavlja
    tree.heading("ID", text="ID")  # Definišemo naziv svake kolone
    tree.heading("First Name", text="First Name")
    tree.heading("Last Name", text="Last Name")
    tree.heading("Address", text="Address")
    tree.heading("Contact", text="Contact")
    tree.heading("DOB", text="Date of Birth")
    tree.pack(pady=10)  # Postavljamo tabelu na ekran i dodajemo malo razmaka ispod

    # Funkcija koja će se pozvati kada korisnik pritisne dugme "View Students"
    def view_selected_students():
        class_to_view = selected_class.get()  # Uzima školsku klasu koju je korisnik izabrao
        found_students = {id: info for id, info in students.items() if info['school_class'] == class_to_view}  # Filtrira studente koji pripadaju izabranoj klasi

        for row in tree.get_children():  # Brišemo prethodne podatke u tabeli (ako ih ima)
            tree.delete(row)

        if not found_students:  # Ako nije bilo studenata u toj klasi
            messagebox.showinfo("Info", f"No students found in class {class_to_view}.")
        else:
            # Ako su pronađeni studenti, unosimo ih u tabelu
            for student_id, info in found_students.items():
                tree.insert("", "end", values=(
                    student_id, info['first_name'], info['last_name'], info['address'], info['contact'],
                    info['date_of_birth']))

    # Funkcija za brisanje selektovanog studenta
    def delete_selected_student():
        selected_item = tree.selection()  # Dobijamo selektovani red
        if not selected_item:
            messagebox.showwarning("Warning", "No student selected for deletion.")
            return

        # Uzima ID selektovanog studenta
        student_id = tree.item(selected_item, "values")[0]

        # Potvrda brisanja
        confirm = messagebox.askyesno("Confirm Delete", f"Are you sure you want to delete student ID {student_id}?")
        if confirm:
            # Brisanje studenta iz students dictionary-a
            del students[student_id]
            # Ponovno prikazivanje studenata u tabeli
            view_selected_students()

    # Kreiramo dugme za prikaz studenata
    view_button = tk.Button(view_window, text="View Students", command=view_selected_students, bg='white', width=20)
    # Pozicioniramo dugme 100 px od ivice prozora sa leve strane i 20 px od donjeg dela prozora
    view_button.place(x=420, y=320)

    # Kreiramo dugme za brisanje studenata
    delete_button = tk.Button(view_window, text="Delete Selected Student", command=delete_selected_student, bg='white', width=20)
    # Pozicioniramo dugme 100 px od ivice prozora sa leve strane i 40 px ispod dugmeta za prikaz studenata
    delete_button.place(x=420, y=355)

    # Ne koristimo pack() za dugmadi jer koristimo place()
Editor is loading...
Leave a Comment