def save(self): first_name_str = self.first_name_entry.get() last_name_str = self.last_name_entry.get() if len(first_name_str) == 0 and len(last_name_str) == 0: msb.showwarning("Błąd", "Nie podano imienia i nazwiska.") return elif len(first_name_str) == 0: msb.showwarning("Błąd", "Nie podano imienia.") return elif len(first_name_str) == 0: msb.showwarning("Błąd", "Nie podano nazwiska.") return if len(first_name_str) > 20 and len(last_name_str) > 20: msb.showwarning("Błąd", "Wprowadzone nazwy są za długie.") return elif len(first_name_str) > 20: msb.showwarning("Błąd", "Wprowadzone imie jest za długie.") return elif len(last_name_str) > 20: msb.showwarning("Błąd", "Wprowadzone nazwisko jest za długie.") return sesja.query(Student).filter(Student.id == self.student.id).update({ Student.first_name: first_name_str, Student.last_name: last_name_str }) sesja.commit() self.master.go_back()
def save(self): value_str = self.value_entry.get() if len(value_str) == 0: msb.showwarning("Błąd", "Nie podano wartości oceny.") return try: new_grade_value = float(value_str) except ValueError: msb.showwarning("Błąd", "Wprowadzona wartość oceny jest nieprawidłowa.") return if new_grade_value > 5 or new_grade_value < 2 or not (new_grade_value * 2).is_integer(): msb.showwarning("Błąd", "Wprowadzona wartość oceny jest nieprawidłowa.") return grade_weight = self.scale.get() sesja.query(Grade).filter(Grade.id == self.grade.id).update({ Grade.value: new_grade_value, Grade.grade_category_id: self.category_choice, Grade.weight: grade_weight }) sesja.commit() self.master.go_back()
def delete_subject_here(self): if not self.group_choice: msb.showinfo(None, "Nie wybrano przedmiotu do usunięcia.") return if msb.askokcancel(None, ("Na pewno chcesz usunąć?")): sesja.query(SubjectGroup).filter(SubjectGroup.group_id == self.group_choice.id, SubjectGroup.subject_id == self.subject.id).delete() self.load_group() self.group_choice = 0 sesja.commit()
def load_group(self): i = 0 self.group_list.delete(0, tk.END) self.group_list_object = [] for group in sesja.query(Group).all(): if sesja.query(SubjectGroup).filter(SubjectGroup.subject_id == self.subject.id, SubjectGroup.group_id == group.id).scalar(): self.group_list.insert(i, group.name) self.group_list_object.append(group) i+=1
def try_delete(self): if not self.student_choice: msb.showinfo(None, "Nie wybrano studenta do usunięcia.") return if msb.askokcancel(None, ("Na pewno chcesz usunąć?")): sesja.query(Student).filter( Student.id == self.student_choice.id).delete() self.load_student() self.student_choice = 0 sesja.commit()
def try_delete(self): if not self.grade_choice: msb.showinfo(None, "Nie wybrano oceny do usunięcia.") return if msb.askokcancel(None, ("Na pewno chcesz usunąć?")): sesja.query(Grade).filter( Grade.id == self.grade_choice.id).delete() self.load_grade() self.grade_choice = 0 sesja.commit()
def delete_subject(self): if not self.choice: msb.showinfo(None, "Nie wybrano przedmiotu do usunięcia.") return if msb.askokcancel(None, ("Na pewno chcesz usunąć?")): sesja.query(Subject).filter( Subject.name == self.choice.name).delete() self.load_subject() self.choice = 0 sesja.commit()
def __init__(self, master, subject): tk.Frame.__init__(self, master) tk.Label(self, text="Zmień nazwę przedmiotu: ", font=("Calibri", 12)).grid(row=0, columnspan=2, sticky=N + E + S + W) self.name_entry = tk.Entry(self, font=("Calibri", 12)) self.name_entry.insert(0, subject.name) self.name_entry.grid(row=1, columnspan=2, sticky=N + E + S + W) self.master = master self.subject = subject self.all_groups = [] self.groups_checkbox = [] self.groups_checkbox_state = [] if len(self.all_groups) > 0: tk.Label(self, text="Wybierz przynależne grupy: ", font=("Calibri", 12)).grid(row=2, columnspan=2, sticky=N + E + S + W) i = 0 for group in sesja.query(Group).all(): var = tk.IntVar() self.all_groups.append(group) self.groups_checkbox.append( tk.Checkbutton(self, text=group.name, variable=var, font=("Calibri", 12))) if sesja.query(SubjectGroup.group_id).filter( SubjectGroup.subject_id == subject.id, SubjectGroup.group_id == group.id).scalar(): self.groups_checkbox[i].select() self.groups_checkbox_state.append(var) i += 1 i = 3 for group in self.groups_checkbox: group.grid(row=i, columnspan=2, sticky=N + S + W) i += 1 tk.Button(self, text="✔ Zapisz", command=self.save, height=2).grid(row=i, column=1, sticky=N + E + S + W, pady=3) tk.Button(self, text="⬅ Wróć", command=lambda: master.go_back(), height=2).grid(row=i, column=0, sticky=N + E + S + W, pady=3) for i in range(0, 6): self.grid_columnconfigure(i, weight=2, uniform=True)
def load_grade(self): self.grade_list.delete(0, tk.END) self.grade_list_obj = [] i = 0 for grade in sesja.query(Grade).filter( Grade.student_id == self.student.id, Grade.subject_id == self.subject.id).all(): category_name = sesja.query(GradeCategory.name).filter( GradeCategory.id == grade.grade_category_id).one() self.grade_list.insert( i, (str(grade.value) + " (" + category_name[0] + ", waga " + str(grade.weight) + ")")) self.grade_list_obj.append(grade) i += 1
def __init__(self, master, group, subject): tk.Frame.__init__(self, master) label_1 = tk.Label(self, text="Wybierz kategorię i wagę oceny", font=("Calibri", 12)) label_1.grid(row = 0, columnspan = 4, sticky=N + E + S + W) self.group = group self.subject = subject self.master = master self.cb_value = tk.StringVar() self.combobox_grade_categories = ttk.Combobox(self, textvariable = self.cb_value, state="readonly", font=("Calibri", 12)) self.combobox_grade_categories.grid(row = 1, columnspan=4, sticky=N + E + S + W) grade_categories_obj = [] grade_categories = [] for category in sesja.query(GradeCategory).all(): grade_categories_obj.append(category) grade_categories.append(category.name) self.combobox_grade_categories['values'] = grade_categories self.combobox_grade_categories.current(0) self.category_choice = 1 self.combobox_grade_categories.bind("<<ComboboxSelected>>", self.select_category) self.scale = Scale(self, from_ = 1, to = 10, orient = HORIZONTAL, font=("Calibri", 12), tickinterval= 9) self.scale.grid(row = 2, columnspan = 4, sticky=N + E + S + W) tk.Label(self, text="Studenci: ", font=("Calibri", 12)).grid(row = 3, column = 0, columnspan = 3, sticky=N + S + W) tk.Label(self, text="Oceny: ", font=("Calibri", 12)).grid(row = 3, column = 3, sticky=N + E + S + W) self.student_obj_list = [] for student in sesja.query(Student).filter(Student.group_id == self.group.id).order_by(Student.last_name, Student.first_name).all(): self.student_obj_list.append(student) self.y = len(self.student_obj_list) self.cells = [] for i in range(0, self.y): cell = [0, 1] cell[0] = tk.Entry(self, width=40, font=("Calibri", 12)) cell[0].insert(tk.END, (self.student_obj_list[i].last_name + " " + self.student_obj_list[i].first_name)) cell[0].configure(state='disabled') cell[0].grid(row = i + 4, column = 0, columnspan=3, sticky=N + E + S + W) cell[1] = tk.Entry(self, width=10, font=("Calibri", 12)) cell[1].grid(row = i + 4, column = 3, sticky=N + E + S + W) self.cells.append(cell) save_button = tk.Button(self, text="✔ Zapisz", command=self.save, font=("Calibri", 10)).grid(row = self.y + 4, column = 2, columnspan=2, sticky=N + E + S + W, pady=3) back_button = tk.Button(self, text="⬅ Wróć", command=lambda: master.go_back(), font=("Calibri", 10)).grid(row = self.y + 4, column = 0, columnspan=2, sticky=N + E + S + W, pady=3) for i in range(0, 4): self.grid_columnconfigure(i, weight = 1, uniform=True)
def save(self): name_str = self.name_entry.get() if len(name_str) == 0: msb.showwarning("Błąd", "Nie wprowadzono nazwy grupy.") return elif len(name_str) > 100: msb.showwarning("Błąd", "Wprowadzona nazwa jest za długa.") return if name_str != self.group.name: if sesja.query(Group.name).filter_by(name=name_str).scalar(): msb.showwarning("Błąd", "Podana nazwa jest już zajęta.") return sesja.query(Group).filter(Group.id == self.group.id).update( {Group.name: name_str}) sesja.commit() self.master.go_back()
def save(self): name_str = self.name_entry.get() if len(name_str) == 0: msb.showwarning("Błąd", "Nie wprowadzono nazwy grupy.") return elif len(name_str) > 100: msb.showwarning("Błąd", "Wprowadzona nazwa jest za długa.") return if sesja.query(Group.name).filter_by(name=name_str).scalar(): msb.showwarning("Błąd", "Podana nazwa jest już zajęta.") else: sesja.add(Group(name=name_str)) id = sesja.query(Group.id).filter(Group.name == name_str).one() sesja.add(SubjectGroup(group_id=id[0], subject_id=self.subject.id)) sesja.commit() self.master.go_back()
def load_subject(self): self.subject_list.delete(0, tk.END) self.subject_obj_list = [] i = 0 for subject in sesja.query(Subject).order_by(Subject.name).all(): self.subject_obj_list.append(subject) self.subject_list.insert(i, subject.name) i += 1
def load_student(self): self.student_list.delete(0, tk.END) self.student_list_obj = [] i = 0 for student in sesja.query(Student).filter( Student.group_id == self.group.id).order_by( Student.last_name, Student.first_name).all(): self.student_list.insert( i, (student.last_name + " " + student.first_name)) self.student_list_obj.append(student) i += 1
def save(self): name_str = self.name_entry.get() if len(name_str) == 0: msb.showwarning("Błąd", "Nie wprowadzono nazwy przedmiotu.") return elif len(name_str) > 100: msb.showwarning("Błąd", "Wprowadzona nazwa jest za długa.") return if name_str != self.subject.name: exists = sesja.query( Subject.name).filter_by(name=name_str).scalar() if exists: msb.showwarning("Błąd", "Podana nazwa jest już zajęta.") return sesja.query(Subject).filter(Subject.id == self.subject.id).update( {Subject.name: name_str}) sesja.query(SubjectGroup.group_id).filter( SubjectGroup.subject_id == self.subject.id).delete() for group in self.get_selected_groups(): sesja.add( SubjectGroup(subject_id=self.subject.id, group_id=group.id)) sesja.commit() self.master.go_back()
def save(self): name_str = self.name_entry.get() if len(name_str) == 0: msb.showwarning("Błąd", "Nie wprowadzono nazwy przedmiotu.") return elif len(name_str) > 100: msb.showwarning("Błąd", "Wprowadzona nazwa jest za długa.") return exists = sesja.query(Subject.name).filter_by(name=name_str).scalar() if exists: msb.showwarning("Błąd", "Podana nazwa jest już zajęta.") else: sesja.add(Subject(name=name_str, groups=self.get_selected_groups())) sesja.commit() self.master.go_back()
def __init__(self, master, subject, group): tk.Frame.__init__(self, master) label = tk.Label(self, text=(" Przedmiot: " + subject.name + "\nGrupa: " + group.name), font=("Calibri", 20), anchor='w') label.grid(row=0, sticky=N + E + S + W, columnspan=6) self.group = group self.subject = subject self.students_obj_list = [] for student in sesja.query(Student).filter( Student.group_id == self.group.id).order_by( Student.last_name, Student.first_name).all(): self.students_obj_list.append(student) self.grade_categories_list = [] for grade_category in sesja.query(GradeCategory).all(): self.grade_categories_list.append(grade_category) y = len(self.students_obj_list) + 2 x = len(self.grade_categories_list) + 1 for i in range(2, y): e = tk.Text(self, height=2, wrap='word', font=("Calibri", 12)) e.grid(row=i, column=0, sticky=N + E + S + W) e.insert(tk.END, (self.students_obj_list[i - 2].last_name + " " + self.students_obj_list[i - 2].first_name)) e.config(state='disabled') for i in range(1, x): e = tk.Text(self, height=1, font=("Calibri", 12)) e.grid(row=1, column=i, sticky=N + E + S + W) e.insert(tk.END, (self.grade_categories_list[i - 1].name)) e.config(state='disabled') for i in range(1, x): for j in range(2, y): e = tk.Text(self, height=2, wrap='word') e.grid(row=j, column=i, sticky=N + E + S + W) grades = [] for grade in sesja.query(Grade.value).filter( Grade.student_id == self.students_obj_list[j - 2].id, Grade.grade_category_id == self.grade_categories_list[ i - 1].id, Grade.subject_id == self.subject.id).all(): grades.append(grade) e.insert(tk.END, grades) e.config(state='disabled') average_label = tk.Text(self, height=1, width=10) average_label.grid(column=x, row=1, sticky=N + E + S + W) average_label.insert(tk.END, "Średnia") average_label.config(state='disabled') for i in range(2, y): e = tk.Text(self, height=2) e.grid(row=i, column=x, sticky=N + E + S + W) student_grades = [] iAverage = 0.0 iSum = 0.0 iQuantity = 0 for grade in sesja.query(Grade).filter( Grade.student_id == self.students_obj_list[i - 2].id, Grade.subject_id == self.subject.id): iSum += grade.value * grade.weight iQuantity += grade.weight if iQuantity > 0: iAverage = round((iSum / iQuantity), 2) e.insert(tk.END, iAverage) e.config(state='disabled') for i in range(0, x): self.grid_columnconfigure(i, weight=2, uniform=True) self.grid_columnconfigure(x, weight=1, uniform=True) empty_label = tk.Label(self) empty_label.grid(row=y + 2, column=x) edit_students_button = tk.Button( self, text="✏ Edytuj listę studentów", height=2, command=lambda: master.navigate_to(StudentChoose, group)) edit_students_button.grid(row=y + 3, column=0, sticky=N + E + S + W, pady=3, padx=3) edit_grades_button = tk.Button( self, text="➡ Zarządzaj ocenami", height=2, command=lambda: master.navigate_to(StudentChoose, group, subject)) edit_grades_button.grid(row=y + 3, column=1, sticky=N + E + S + W, pady=3, padx=3) add_series_button = tk.Button( self, text="➕ Dodaj serię ocen", height=2, command=lambda: master.navigate_to(AddGradeSeries, group, subject)) add_series_button.grid(row=y + 3, column=2, sticky=N + E + S + W, pady=3, padx=3) back_button = tk.Button(self, text="⬅ Wróć", command=lambda: master.go_back(), height=2) back_button.grid(row=y + 4, column=0, sticky=N + E + S + W, pady=3, padx=3)
def __init__(self, master, student, subject): tk.Frame.__init__(self, master) tk.Label(self, text="Dodaj ocenę", font=("Calibri", 14)).grid(row=0, columnspan=2) tk.Label(self, text="Wybierz kategorię i wagę oceny", font=("Calibri", 12)).grid(row=1, columnspan=2, sticky=N + E + S + W) self.student = student self.subject = subject self.master = master self.cb_value = tk.StringVar() self.combobox_grade_categories = ttk.Combobox( self, textvariable=self.cb_value, state="readonly", font=("Calibri", 12)) self.combobox_grade_categories.grid(row=2, columnspan=2, sticky=N + E + S + W) grade_categories_obj = [] grade_categories = [] for category in sesja.query(GradeCategory).all(): grade_categories_obj.append(category) grade_categories.append(category.name) self.combobox_grade_categories['values'] = grade_categories self.combobox_grade_categories.current(0) self.category_choice = 1 self.combobox_grade_categories.bind("<<ComboboxSelected>>", self.select_category) self.scale = Scale(self, from_=1, to=10, orient=HORIZONTAL, font=("Calibri", 12), tickinterval=9) self.scale.grid(row=4, columnspan=2, sticky=N + E + S + W) tk.Label(self, text="Podaj ocenę", font=("Calibri", 12)).grid(row=5, columnspan=2, sticky=N + E + S + W) self.value_entry = tk.Entry(self, font=("Calibri", 12)) self.value_entry.grid(row=6, columnspan=2, sticky=N + E + S + W) tk.Button(self, text="✔ Zapisz", command=self.save, font=("Calibri", 10)).grid(row=7, column=1, sticky=N + E + S + W, pady=3) tk.Button(self, text="⬅ Wróć", command=lambda: master.go_back(), font=("Calibri", 10)).grid(row=7, column=0, sticky=N + E + S + W, pady=3) for i in range(0, 2): self.grid_columnconfigure(i, weight=2, uniform=True)
def select_category(self, event): str_choice = self.cb_value.get() int_choice = sesja.query(GradeCategory.id).filter(GradeCategory.name == str_choice).one() self.category_choice = int_choice[0]