Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
import tkinter as tk
from tkinter import messagebox
from datetime import datetime
import json
class Examen:
def init(self, nume, materie, data):
self.nume = nume
self.materie = materie
self.data = data
class GestionareExamen:
def init(self):
self.examine = []
#inițializează o listă goală self.examine, care va conține toate examenele.
Creează un nou obiect Examen folosind datele primite și îl adaugă în lista self.examine.
Verifică dacă indexul este valid si sterge examenul corespunzător indexului din lista self.examine.
#Creează o listă formatată din toate examenele si convertește fiecare examen într-un string
încărca examenele salvate într-un fișier JSON și de a le adăuga în lista self.examine.
Funcții pentru interfața grafică
#Functie pentru adăugarea unui examen pe baza datelor introduse în câmpuril casutele de text
def adauga_examen_gui():
"""Adaugă un examen direct pe fereastra principală."""
nume = nume_entry.get()
materie = materie_entry.get()
data = data_entry.get()
#funcția șterge examenul selectat din lista de examene.
def sterge_examen_gui():
"""Sterge examenul selectat direct pe fereastra principală."""
selected = listbox.curselection()
if not selected:
messagebox.showwarning("Atenție", "Selectați un examen pentru a-l șterge.")
return
index = selected[0]
gestionare.sterge_examen(index)
refresh_listbox()
messagebox.showinfo("Succes", "Examenul a fost șters cu succes!")
def calculeaza_zile_ramase():
"""Calculează câte zile mai sunt până la examenul selectat și le afișează."""
selected = listbox.curselection()
if not selected:
messagebox.showwarning("Atenție", "Selectați un examen pentru a calcula zilele rămase.")
return
index = selected[0]
examen = gestionare.examine[index]
zile = examen.zile_ramase()
messagebox.showinfo("Zile Rămase", f"{examen.nume}: {zile}")
def refresh_listbox():
"""Actualizează lista de examene afișată pe fereastra principală."""
listbox.delete(0, tk.END)
if not gestionare.examine:
listbox.insert(tk.END, "Nu există examene programate.")
else:
for examen in gestionare.examine:
listbox.insert(tk.END, str(examen))
Creează instanța gestionării examenelor și încarcă examenele salvate
gestionare = GestionareExamen()
gestionare.incarca_examene() # Încarcă examenele din fișier la deschidere
root = tk.Tk()
root.title("Programare Examene")
root.configure(bg="#ADD8E6") # Fundal albastru deschis
Creează eticheta pentru titlu
title_label = tk.Label(root, text="Aplicație de Gestionare a Examenelor", font=("Arial", 20, "bold"), bg="#ADD8E6")
title_label.pack(pady=20)
Câmpuri pentru introducerea datelor examenului
form_frame = tk.Frame(root, bg="#ADD8E6")
form_frame.pack(pady=10)
#Creează un cadru pentru organizarea câmpurilor de introducere a datelor
nume_label = tk.Label(form_frame, text="Numele examenului:", font=("Arial", 14), bg="#ADD8E6")
nume_label.grid(row=0, column=0, padx=10, pady=10)
nume_entry = tk.Entry(form_frame, font=("Arial", 14), width=30)
nume_entry.grid(row=0, column=1, padx=10, pady=10)
materie_label = tk.Label(form_frame, text="Materia examenului:", font=("Arial", 14), bg="#ADD8E6")
materie_label.grid(row=1, column=0, padx=10, pady=10)
materie_entry = tk.Entry(form_frame, font=("Arial", 14), width=30)
materie_entry.grid(row=1, column=1, padx=10, pady=10)
data_label = tk.Label(form_frame, text="Data examenului (DD-MM-YYYY):", font=("Arial", 14), bg="#ADD8E6")
data_label.grid(row=2, column=0, padx=10, pady=10)
data_entry = tk.Entry(form_frame, font=("Arial", 14), width=30)
data_entry.grid(row=2, column=1, padx=10, pady=10)
Butoane pentru adăugare, ștergere, calcularea zilelor și ieșire
button_frame = tk.Frame(root, bg="#ADD8E6")
button_frame.pack(pady=20)
#Creează un cadru pentru organizarea butoanelor
add_button = tk.Button(button_frame, text="Adaugă Examen", font=("Arial", 14), command=adauga_examen_gui, bg="white", fg="black", width=15)
add_button.grid(row=0, column=0, padx=10)
delete_button = tk.Button(button_frame, text="Șterge Examen", font=("Arial", 14), command=sterge_examen_gui, bg="white", fg="black", width=15)
delete_button.grid(row=0, column=1, padx=10)
calc_button = tk.Button(button_frame, text="Câte zile rămase", font=("Arial", 14), command=calculeaza_zile_ramase, bg="white", fg="black", width=15)
calc_button.grid(row=0, column=2, padx=10)
Buton de ieșire care salvează examenele înainte de a închide aplicația
def iesire():
"""Salvează examenele și închide aplicația."""
gestionare.salveaza_examene()
messagebox.showinfo("Ieșire", "Examenele au fost salvate. Aplicația se va închide acum.")
root.quit()
exit_button = tk.Button(button_frame, text="Ieșire", font=("Arial", 14), command=iesire, bg="white", fg="black", width=15)
exit_button.grid(row=0, column=3, padx=10)
Creează lista de examene
frame = tk.Frame(root, bg="#ADD8E6")
frame.pack(pady=10)
listbox = tk.Listbox(frame, font=("Arial", 14), width=60, height=10)
listbox.pack(side=tk.LEFT, padx=10)
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=listbox.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
listbox.config(yscrollcommand=scrollbar.set)
Populează lista la start
refresh_listbox()
Rulează aplicația
root.mainloop()