def create_new_class(*args): #Getting the Textfield newclassname = builder.get_object("class_name_text") #saving the Name classname = newclassname.get_text() #If Classname ist Empty than Error-Message if len(classname) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Ungültiger Name", "Bitte gültigen Namen eingeben (Keine Sonderzeichen! Bsp. 11_GkInf1)!") messWindow.destroy() else: #Create new Database-File in "database" if not exists ############### THE DEFAULT-PATH COULD BE CHANGE LATER IN A FILE ######### # # # default_path = "../GradeLi Classes/" # # # ######################################################################### if os.path.isfile(default_path + classname + ".db") == True: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Name vergeben", "Name der Klasse ist bereits vergeben. Bitte anderen Namen nutzen oder alte Klasse verschieben.") messWindow.destroy() newclasswindow.destroy() else: #Close Popup-Window close_window_newclass() #Creating the new Class-Database dataop = DataOp() con = dataop.newdatabase(classname) dataop.closedatabase(con) #Adding Class to Combobox - Sorting after restart classesbox = builder.get_object("classes") classesbox.append_text(classname) #Saving new Classname new_class_name = classname #Make Loadingbutton Clickable loadclass = builder.get_object("loadclass") loadclass.set_sensitive(True) #Activate always the first Item in the List classesbox.set_active(0) #Open new Window with new Class-Database newmainclass = MainClasses() newmainclass.start(new_class_name)
def start(self, classname, builder, window): #Databaseconnection dataop = DataOp() con = dataop.opendatabase(classname) #Get all the Grids :) datagrid_buttons = builder.get_object("datagrid_buttons") newviewgrid = builder.get_object("datagrid") #Delete a UNit def deleteunit(self, id, year, month, day): messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.askokcancel("Warnung", "ACHTUNG! Alle Daten der Stunde vom " + str(day) + "." + str(month) + "." + str(year) + " werden UNWIDERRUFLICH gelöscht. Fortfahren?") messWindow.destroy() #Check for deleting or not if result == True: #Delete True - Delete the Unit and reload the Grid dataop.deleteUnitComplete(con, id) fillDataGrid() #Save Updatet Information of a Unit def saveupdateunit(self, id, updateunitwindow): #Get new Title date = builder.get_object("unit_date").get_date() title = builder.get_object("unit_title").get_text().decode("utf-8") #Saving changes cur = con.cursor() cur.execute("UPDATE units SET year=?, month=?, day=?, title=? WHERE id=?", (date[0], date[1] + 1, date[2], title, id)) con.commit() updateunitwindow.destroy() fillDataGrid() #Change a unit def changeunit(self, id, year, month, day, title): builder.add_from_file("gui/NewUnitPopUpdate.glade") updateunitwindow = builder.get_object("updateunitwindow") #Select actual Date in Calender date = builder.get_object("unit_date") date.select_month(month - 1, year) date.select_day(day) titlewidget = builder.get_object("unit_title") titlewidget.set_text(title.encode("utf-8")) #Get Button-Object savedata = builder.get_object("updateunit_save") savedata.connect("clicked", saveupdateunit, id, updateunitwindow) #Show New-Student-Popup updateunitwindow.show_all() #Save new Unit def dosaveunit(self, unitwindow): #Getting Date and Title #Getting Date: Yeahr date[0] month[1] day[2] date = builder.get_object("newunit_date").get_date() title = builder.get_object("newunit_title").get_text().decode("utf-8") #Make the Month userfriendly :) month = int(date[1]) + 1 #Saving new Unit into Database cur = con.cursor() #Count existing Units in the Datbase newid = dataop.getdata(con, "select count(id) from units", None) if newid.fetchone()[0] == 0: cur.execute("insert into units(id, year, month, day, title) values (0, ?, ?, ?, ?);", (int(date[0]), int(month), int(date[2]), title,)) else: cur.execute("insert into units(id, year, month, day, title) values ((SELECT max(id) FROM units) + 1, ?, ?, ?, ?);", (date[0], int(month), date[2], title,)) #New Unit-ID: (SELECT max(id) FROM units) #Get all Students datas_allstu = dataop.getdata(con, "select id from students order by name asc", None) #For all Students add UnitStatus-Entry in Database with actual Unit-ID newid_stuunit = dataop.getdata(con, "select count(id) from status_stu_unit", None) newid_unitid = dataop.getdata(con, "SELECT max(id) FROM units", None) #New ID's unitid = newid_unitid.fetchone()[0] unitcount = newid_stuunit.fetchone()[0] for stuall in datas_allstu.fetchall(): if unitcount == 0: cur.execute("insert into status_stu_unit(id, unitid, studentid, status) values (0, ?, ?, 5);", (unitid, int(stuall[0]),)) unitcount = unitcount + 1 else: cur.execute("insert into status_stu_unit(id, unitid, studentid, status) values ((SELECT max(id) FROM status_stu_unit) + 1, ?, ?, 5);", (unitid, int(stuall[0]),)) #Destroy the Add-Unit-Window unitwindow.destroy() #Reload the Data-Grid _ Units will be load there to fillDataGrid() #Updatefunction for Students Unit-Status def updateUnitStu(self, studentid, unitid, newstatus, buttongrid): #Updating Data in Database cur = con.cursor() cur.execute("update status_stu_unit set status=? where unitid=? and studentid=?", (newstatus, unitid, studentid,)) con.commit() #Images ue_b = Gtk.Image() ue_r = Gtk.Image() ue_b.set_from_file("icons/quest_black.png") ue_r.set_from_file("icons/quest_red.png") #OK leaved e_b = Gtk.Image() e_g = Gtk.Image() e_b.set_from_file("icons/ok_black.png") e_g.set_from_file("icons/ok_green.png") #MIddle good work middle_b = Gtk.Image() middle_g = Gtk.Image() middle_b.set_from_file("icons/middle_black.png") middle_g.set_from_file("icons/middle_green.png") #One Plus Work plus_b = Gtk.Image() plus_g = Gtk.Image() plus_b.set_from_file("icons/plus_black.png") plus_g.set_from_file("icons/plus_green.png") #PLusPlus Work plusplus_b = Gtk.Image() plusplus_g = Gtk.Image() plusplus_b.set_from_file("icons/plusplus_black.png") plusplus_g.set_from_file("icons/plusplus_green.png") #One Minus Work minus_b = Gtk.Image() minus_g = Gtk.Image() minus_b.set_from_file("icons/minus_black.png") minus_g.set_from_file("icons/minus_green.png") #MinusMinus Work minusminus_b = Gtk.Image() minusminus_g = Gtk.Image() minusminus_b.set_from_file("icons/minusminus_black.png") minusminus_g.set_from_file("icons/minusminus_green.png") #School-Event school_b = Gtk.Image() school_g = Gtk.Image() school_b.set_from_file("icons/school_black.png") school_g.set_from_file("icons/school_green.png") #Changings Button-Images to show right color and button for button in buttongrid.get_children(): if button.get_name() == "ue": if newstatus == 0: button.set_image(ue_r) else: button.set_image(ue_b) if button.get_name() == "e": if newstatus == 1: button.set_image(e_g) else: button.set_image(e_b) if button.get_name() == "school": if newstatus == 2: button.set_image(school_g) else: button.set_image(school_b) if button.get_name() == "minusminus": if newstatus == 3: button.set_image(minusminus_g) else: button.set_image(minusminus_b) if button.get_name() == "minus": if newstatus == 4: button.set_image(minus_g) else: button.set_image(minus_b) if button.get_name() == "mid": if newstatus == 5: button.set_image(middle_g) else: button.set_image(middle_b) if button.get_name() == "plus": if newstatus == 6: button.set_image(plus_g) else: button.set_image(plus_b) if button.get_name() == "plusplus": if newstatus == 7: button.set_image(plusplus_g) else: button.set_image(plusplus_b) #Showing the New-Unit-Popup def do_addunit(*args): builder.add_from_file("gui/NewUnitPop.glade") addunitwindow = builder.get_object("addunitwindow") addunitbutton = builder.get_object("addunit_save") addunitbutton.connect("clicked", dosaveunit, addunitwindow) #Show NewUnit-Popup addunitwindow.show_all() #Adding all Students to the Grid def addingstudents(self, startpoint): #Adding Studentsnames - Postname, Prenames, Numbers and Buttons data_stu = dataop.getdata(con, "select id, name, prename, mail from students order by 2 asc", None) startfield_rows = 1 #Startfield of Rows if startpoint == None: startpoint = 1 for stu in data_stu.fetchall(): templabel_numbers = Gtk.Label() templabel_postname = Gtk.Label() templabel_prename = Gtk.Label() templabel_numbers.set_text(" " + str(startfield_rows) + ". ") templabel_postname.set_text(stu[1].encode("utf-8") + " ") templabel_prename.set_text(stu[2].encode("utf-8") + " ") #COLOR 0-65535 Gdk.Color(RED, GREEN, BLUE) if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(templabel_numbers, startpoint , startfield_rows + 1, 1, 1) newviewgrid.attach(templabel_postname, startpoint + 1 , startfield_rows + 1, 1, 1) newviewgrid.attach(templabel_prename, startpoint + 2, startfield_rows + 1, 1, 1) startfield_rows = startfield_rows + 1 #Loading all Units from Database with Buttons def loadingallunits(*args): #Adding Units datas = dataop.getdata(con, "select id, year, month, day, title from units order by year, month, day asc", None) #Startfield of Rows startfield_rows = 4 numb = 1 for row in datas.fetchall(): #Adding the Date-Label unitbuttonsgrid = Gtk.Grid() unitbuttonsgrid_snd = Gtk.Grid() #Label templabel_date = Gtk.Label() #Create a Nice String with max 16 Signs and three points if longer title_unit = str(row[4].encode("utf-8")) if len(title_unit) > 16: title_unit = title_unit[:16] + "..." templabel_date.set_markup("<b><big>" + str(row[3]) + "." + str(row[2]) + "." + str(row[1]) + "</big>\n" + title_unit + "</b>") templabel_date.set_justify(Gtk.Justification.LEFT) unitbuttonsgrid.attach(templabel_date, 2, 1, 1, 1) #Buttons #ChangeButton changebutton = Gtk.Button() changebutton.set_name("button_" + str(row[0])) image = Gtk.Image() image.set_from_file("icons/gear74.png") changebutton.set_size_request(10,10) changebutton.set_image(image) #Button to Label unitbuttonsgrid_snd.attach(changebutton, 2, 1, 1, 1) #Add Action to the Button with id from actual student changebutton.connect("clicked", changeunit, row[0], row[1], row[2], row[3], row[4]) #DeleteButton deletebutton = Gtk.Button() deletebutton.set_name("delbutton_" + str(row[0])) image = Gtk.Image() image.set_from_file("icons/cancel19.png") deletebutton.set_size_request(10,10) deletebutton.set_image(image) #Button to Label unitbuttonsgrid_snd.attach(deletebutton, 3, 1, 1, 1) #Add Action to the Button with id from actual student deletebutton.connect("clicked", deleteunit, row[0], row[1], row[2], row[3]) #Spacer space = Gtk.Label() space.set_text("") unitbuttonsgrid.attach(space, 1, 1, 1, 1) unitbuttonsgrid.attach(unitbuttonsgrid_snd, 2, 2, 1, 1) #Adding all to the Main-Grid newviewgrid.attach(unitbuttonsgrid, startfield_rows, 1, 1, 1) #Adding all Buttons to all Students buttoncounter = 2 data_students = dataop.getdata(con, "select id from students order by name asc", None) for student in data_students.fetchall(): #Getting Status of the Student cur = con.cursor() unitstat_data = cur.execute("select status from status_stu_unit where unitid=? and studentid=?", (int(row[0]), int(student[0]),)) for counter in unitstat_data.fetchall(): unitstat = counter[0] #Images ue_b = Gtk.Image() ue_r = Gtk.Image() ue_b.set_from_file("icons/quest_black.png") ue_r.set_from_file("icons/quest_red.png") #OK leaved e_b = Gtk.Image() e_g = Gtk.Image() e_b.set_from_file("icons/ok_black.png") e_g.set_from_file("icons/ok_green.png") #MIddle good work middle_b = Gtk.Image() middle_g = Gtk.Image() middle_b.set_from_file("icons/middle_black.png") middle_g.set_from_file("icons/middle_green.png") #One Plus Work plus_b = Gtk.Image() plus_g = Gtk.Image() plus_b.set_from_file("icons/plus_black.png") plus_g.set_from_file("icons/plus_green.png") #PLusPlus Work plusplus_b = Gtk.Image() plusplus_g = Gtk.Image() plusplus_b.set_from_file("icons/plusplus_black.png") plusplus_g.set_from_file("icons/plusplus_green.png") #One Minus Work minus_b = Gtk.Image() minus_g = Gtk.Image() minus_b.set_from_file("icons/minus_black.png") minus_g.set_from_file("icons/minus_green.png") #MinusMinus Work minusminus_b = Gtk.Image() minusminus_g = Gtk.Image() minusminus_b.set_from_file("icons/minusminus_black.png") minusminus_g.set_from_file("icons/minusminus_green.png") #School-Event school_b = Gtk.Image() school_g = Gtk.Image() school_b.set_from_file("icons/school_black.png") school_g.set_from_file("icons/school_green.png") #Creating all Buttons and actions #UE-Button button_ue = Gtk.Button() button_ue.set_name("ue") button_ue.set_size_request(5,5) button_ue.set_image(ue_b) #E-Button button_e = Gtk.Button() button_e.set_name("e") button_e.set_size_request(5,5) button_e.set_image(e_b) #Middle-Button button_middle = Gtk.Button() button_middle.set_name("mid") button_middle.set_size_request(5,5) button_middle.set_image(middle_b) #Plus-Button button_plus = Gtk.Button() button_plus.set_name("plus") button_plus.set_size_request(5,5) button_plus.set_image(plus_b) #PlusPlus-Button button_plusplus = Gtk.Button() button_plusplus.set_name("plusplus") button_plusplus.set_size_request(5,5) button_plusplus.set_image(plusplus_b) #Minus-Button button_minus = Gtk.Button() button_minus.set_name("minus") button_minus.set_size_request(5,5) button_minus.set_image(minus_b) #MinusMinus-Button button_minusminus = Gtk.Button() button_minusminus.set_name("minusminus") button_minusminus.set_size_request(5,5) button_minusminus.set_image(minusminus_b) #School-Button button_school = Gtk.Button() button_school.set_name("school") button_school.set_size_request(5,5) button_school.set_image(school_b) #Adding Black or Green/Red Images to the Buttons (depends on the Status of the Student for that Unit) # Status # 0 - Unknown # 1 - Leave OK # 2 - Schoolreason # 3 - MinusMinus # 4 - Minus # 5 - Middle # 6 - Plus # 7 - PlusPlus if unitstat == 0: button_ue.set_image(ue_r) elif unitstat == 1: button_e.set_image(e_g) elif unitstat == 2: button_school.set_image(school_g) elif unitstat == 3: button_minusminus.set_image(minusminus_g) elif unitstat == 4: button_minus.set_image(minus_g) elif unitstat == 5: button_middle.set_image(middle_g) elif unitstat == 6: button_plus.set_image(plus_g) elif unitstat == 7: button_plusplus.set_image(plusplus_g) #Adding all Buttons #Creating the Grid buttonsgrid = Gtk.Grid() space1 = Gtk.Label() space1.set_text(" ") buttonsgrid.attach(space1, 5,1,1,1) space2 = Gtk.Label() space2.set_text(" ") buttonsgrid.attach(space2, 1,3,1,1) buttonsgrid.attach(button_ue, 1,1,1,1) buttonsgrid.attach(button_e, 2,1,1,1) buttonsgrid.attach(button_school, 3,1,1,1) buttonsgrid.attach(button_minus, 1,2,1,1) buttonsgrid.attach(button_middle, 2,2,1,1) buttonsgrid.attach(button_plus, 3,2,1,1) buttonsgrid.attach(button_minusminus, 4,1,1,1) buttonsgrid.attach(button_plusplus, 4,2,1,1) #Adding all Actions button_ue.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 0, buttonsgrid) button_e.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 1, buttonsgrid) button_middle.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 5, buttonsgrid) button_plus.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 6, buttonsgrid) button_plusplus.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 7, buttonsgrid) button_minus.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 4, buttonsgrid) button_minusminus.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 3, buttonsgrid) button_school.connect("clicked", updateUnitStu, int(student[0]), int(row[0]), 2, buttonsgrid) con.commit() #Check for Grey-Background if buttoncounter % 2 == 0: buttonsgrid.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.8, 0.8, 0.8)) #Adding Students Buttons newviewgrid.attach(buttonsgrid, startfield_rows, buttoncounter, 1, 1) #Increase Counter to print and save everything buttoncounter = buttoncounter + 1 #Give all Students-Names every Unit wich is mod 4 if numb % 4 == 0: addingstudents(self, startfield_rows + 1) startfield_rows = startfield_rows + 5 numb = numb + 1 else: startfield_rows = startfield_rows + 1 numb = numb + 1 #Fill the Grid with all Data from the actual database resp. Class def fillDataGrid(*args): #Clear the grid for child in newviewgrid.get_children(): newviewgrid.remove(child) #Clear the button-grid for child in datagrid_buttons.get_children(): datagrid_buttons.remove(child) #Adding Buttons in Top-Area to add Students or import a csv-List (LATER!!) addunit = Gtk.Button.new_with_label("Neue Einheit") addunit.connect("clicked", do_addunit) datagrid_buttons.attach(addunit, 0, 1, 1, 1) #Loading the Students addingstudents(self, None) #Loading all Units loadingallunits() #Show the window window.show_all() #Fill the Grid for the first time and call this method to reload fillDataGrid()
def start(self, classname, builder, window): #Databaseconnection dataop = DataOp() con = dataop.opendatabase(classname) #Button Prev/Next student def do_prevstu(self, combobox, maxstu): if combobox.get_active() > 0: combobox.set_active(combobox.get_active() - 1) else: combobox.set_active(maxstu - 1) def do_nextstu(self, combobox, maxstu): if combobox.get_active() + 1 != maxstu: combobox.set_active(combobox.get_active() + 1) else: combobox.set_active(0) #Show actual Student def updateview(self, combobox, grid): #Clear the Grid for child in grid.get_children(): grid.remove(child) tree_iter = combobox.get_active_iter() model = combobox.get_model() id, name = model[tree_iter][:2] #id = StudentId #Add Student Name to Grid stuname_label = Gtk.Label() stuname_label.set_markup("\n<big><b>" + name + "</b></big>") grid.attach(stuname_label, 0, 0, 1, 1) #Counting all Status-Infos # Status # 0 - Unknown # 1 - Leave OK # 2 - Schoolreason # 3 - MinusMinus # 4 - Minus # 5 - Middle # 6 - Plus # 7 - PlusPlus # unknown = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=0", id).fetchone()[0] leaveok = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=1", id).fetchone()[0] school = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=2", id).fetchone()[0] minusminus = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=3", id).fetchone()[0] minus = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=4", id).fetchone()[0] mid = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=5", id).fetchone()[0] plus = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=6", id).fetchone()[0] plusplus = dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=7", id).fetchone()[0] statigrid = Gtk.Grid() statigrid_allstati = Gtk.Grid() status_label = Gtk.Label() status_label.set_markup("\n<b><big>Übersicht </big></b>\n") statigrid.attach(status_label, 0, 0, 1, 1) #Images ue_r = Gtk.Image() ue_r.set_from_file("icons/quest_red.png") lab_ue_count = Gtk.Label() lab_ue_count.set_markup(" <big><b>: " + str(unknown) + "</b></big>") statigrid_allstati.attach(ue_r, 0, 0, 1, 1) statigrid_allstati.attach(lab_ue_count, 1, 0, 1, 1) #OK leaved e_g = Gtk.Image() e_g.set_from_file("icons/ok_green.png") e_g_ue_count = Gtk.Label() e_g_ue_count.set_markup(" <big><b>: " + str(leaveok) + "</b></big>") statigrid_allstati.attach(e_g, 0, 1, 1, 1) statigrid_allstati.attach(e_g_ue_count, 1, 1, 1, 1) #School-Event school_g = Gtk.Image() school_g.set_from_file("icons/school_green.png") school_g_ue_count = Gtk.Label() school_g_ue_count.set_markup(" <big><b>: " + str(school) + "</b></big>") statigrid_allstati.attach(school_g, 0, 2, 1, 1) statigrid_allstati.attach(school_g_ue_count, 1, 2, 1, 1) #MIddle good work middle_g = Gtk.Image() middle_g.set_from_file("icons/middle_green.png") middle_g_ue_count = Gtk.Label() middle_g_ue_count.set_markup(" <big><b>: " + str(mid) + "</b></big>") statigrid_allstati.attach(middle_g, 0, 3, 1, 1) statigrid_allstati.attach(middle_g_ue_count, 1, 3, 1, 1) #One Plus Work plus_g = Gtk.Image() plus_g.set_from_file("icons/plus_green.png") plus_g_ue_count = Gtk.Label() plus_g_ue_count.set_markup(" <big><b>: " + str(plus) + "</b></big>") statigrid_allstati.attach(plus_g, 0, 4, 1, 1) statigrid_allstati.attach(plus_g_ue_count, 1, 4, 1, 1) #PLusPlus Work plusplus_g = Gtk.Image() plusplus_g.set_from_file("icons/plusplus_green.png") plusplus_g_ue_count = Gtk.Label() plusplus_g_ue_count.set_markup(" <big><b>: " + str(plusplus) + "</b></big>") spacer = Gtk.Label(" ") statigrid_allstati.attach(spacer, 2, 4, 1, 1) statigrid_allstati.attach(plusplus_g, 3, 4, 1, 1) statigrid_allstati.attach(plusplus_g_ue_count, 4, 4, 1, 1) #One Minus Work minus_g = Gtk.Image() minus_g.set_from_file("icons/minus_green.png") minus_g_ue_count = Gtk.Label() minus_g_ue_count.set_markup(" <big><b>: " + str(minus) + "</b></big>") statigrid_allstati.attach(minus_g, 0, 5, 1, 1) statigrid_allstati.attach(minus_g_ue_count, 1, 5, 1, 1) #PLusPlus Work minusminus_g = Gtk.Image() minusminus_g.set_from_file("icons/minusminus_green.png") minusminus_g_ue_count = Gtk.Label() minusminus_g_ue_count.set_markup(" <big><b>: " + str(minusminus) + "</b></big>") spacer = Gtk.Label(" ") statigrid_allstati.attach(spacer, 2, 5, 1, 1) statigrid_allstati.attach(minusminus_g, 3, 5, 1, 1) statigrid_allstati.attach(minusminus_g_ue_count, 4, 5, 1, 1) statigrid.attach(statigrid_allstati, 0, 1, 1, 1) #Notes to Grid notegrid = Gtk.Grid() #notegrid_allnotes = Gtk.Grid() notegrid_label = Gtk.Label() notegrid_label.set_markup(" \n<b><big>Noten </big></b>\n") notegrid.attach(notegrid_label, 0, 0, 1, 1) #Calculate the Notes cur = con.cursor() #Calculating all Downcategories and save them to downcat with the Categorie-ID #Step One - Getting all Upper Cats data_upcats = cur.execute("select id, weight, name from catup order by weight desc") rowcounter = 1 columncounter = 0 finalnote = [] for upcats in data_upcats.fetchall(): #print "Upcat: " + str(upcats[2].encode("utf-8")) #print "Weight: " + str(upcats[1]) #print "ID: " + str(upcats[0]) uplabel = Gtk.Label() uplabel.set_markup("<b><big>" + upcats[2].encode("utf-8") + " (" + str(upcats[1]) + ")</big></b> ") notegrid.attach(uplabel, columncounter, rowcounter, 1, 1) rowcounter = rowcounter + 1 #Step Two: Get all Down-Cats with this Upcat-ID data_downcats = cur.execute("select id, weight, name from catdown where upcat=?", (int(upcats[0]), )) downcats_notes = [] for downcats in data_downcats.fetchall(): #print "Downcat: " + str(downcats[2].encode("utf-8")) #print "Weight: " + str(downcats[1]) #print "ID: " + str(downcats[0]) downlabel = Gtk.Label() downlabel.set_markup("<b>" + downcats[2].encode("utf-8") + " (" + str(downcats[1]) + ")</b> ") notegrid.attach(downlabel, columncounter, rowcounter, 1, 1) #Step Three: Get all Notes from this DownCat and Upcat from actual Student data_notes = cur.execute("select id,weight ,name from notes where upcat=? and downcat=?", (upcats[0], downcats[0]),) weight_note = 0 note_calc = 0 for notes in data_notes.fetchall(): #print "Notes: " + str(notes[2].encode("utf-8")) #print "Weight: " + str(notes[1]) #print "ID: " + str(notes[0]) notes_info = Gtk.Label() notes_info.set_markup("<b>" + notes[2].encode("utf-8") + " (" + str(notes[1]) + "):</b> ") notegrid.attach(notes_info, columncounter + 1, rowcounter, 1, 1) #Step Four: Getting the final note try: data_stunote = cur.execute("select id, note from notes_student where studentid=? and notesid=? and note!=16.0", (id, notes[0],)).fetchone()[1] # # SPECIAL: All Notes with 16.0 will not be calculatet!!!! Here beware by other Gradesystems!!! # # note_stu_label = Gtk.Label() note_stu_label.set_markup("<b>" + str(data_stunote) + "</b> ") notegrid.attach(note_stu_label, columncounter + 2, rowcounter, 1, 1) rowcounter = rowcounter + 1 weight_note = weight_note + notes[1] note_calc = note_calc + data_stunote * notes[1] except: rowcounter = rowcounter + 1 #Saving all Downcategorie-Notes ID WEIGHT NOTE if weight_note > 0: downcats_notes.append([downcats[0], downcats[1], round(note_calc / weight_note, 2)]) note_down = Gtk.Label() note_down.set_markup("<b>Gesamt UnKa: " + str(round(note_calc / weight_note, 2)) + "</b>") notegrid.attach(note_down, columncounter + 1, rowcounter, 1, 1) rowcounter = rowcounter + 1 #Calculating final Note for Uppercat note = 0 weight = 0 for finalupcat in downcats_notes: note = note + finalupcat[2] * finalupcat[1] weight = weight + finalupcat[1] #If a Note was calced than save it as Uppercat-Note if weight > 0: finalnote.append([upcats[1], round(note / weight, 2)]) note_up = Gtk.Label() note_up.set_markup("\n<b>Gesamt ObKa: " + str(round(note / weight, 2)) + "</b>") notegrid.attach(note_up, columncounter, rowcounter, 1, 1) columncounter = columncounter + 3 rowcounter = 1 #Last Notecalc: Final Note of the Student finalnotecalc = 0 weightfinal = 0 for finalnoteupcat in finalnote: finalnotecalc = finalnotecalc + finalnoteupcat[1] * finalnoteupcat[0] weightfinal = weightfinal + finalnoteupcat[0] #If all Notes are done: Save the final Note of the Student if weight > 0: studentfinalnote = round(finalnotecalc / weightfinal, 2) finallabelnote = Gtk.Label() finallabelnote.set_markup("<b><big>Abschlussnote: " + str(studentfinalnote) + "</big></b>") notegrid.attach(finallabelnote, columncounter + 1, 0, 1, 1) #All Notes to Note-Grid #notegrid.attach(notegrid_allnotes, 0, 2, 1, 1) #All Grids to Main-Grid grid.attach(notegrid, 1, 1, 1, 1) grid.attach(statigrid, 0, 1, 1, 1) #Reload the Window window.show_all() #Fill the Grid with all Data from the actual database resp. Class def fillDataGrid(*args): #Get all the Grids :) datagrid_buttons = builder.get_object("datagrid_buttons") newviewgrid = builder.get_object("datagrid") #Clear the grid for child in newviewgrid.get_children(): newviewgrid.remove(child) #Clear the button-grid for child in datagrid_buttons.get_children(): datagrid_buttons.remove(child) #StudentCombobox students = Gtk.ListStore(int, str) datas = dataop.getdata(con, "select id, name, prename from students order by 2 asc", None) #Startfield of Rows stucounter = 0 for row in datas.fetchall(): students.append([row[0], str(row[1].encode("utf-8")) + ", " + str(row[2].encode("utf-8"))]) stucounter = stucounter + 1 combobox = Gtk.ComboBox.new_with_model_and_entry(students) combobox.set_entry_text_column(1) combobox.set_active(0) combobox.connect("changed", updateview, combobox, newviewgrid) datagrid_buttons.attach(combobox, 1, 1, 1, 1) #Adding Next-Button prevstu = Gtk.Button.new_with_label("Vorheriger") nextstu = Gtk.Button("Nächster") nextstu.connect("clicked", do_nextstu, combobox, stucounter) prevstu.connect("clicked", do_prevstu, combobox, stucounter) datagrid_buttons.attach(prevstu, 0, 1, 1, 1) datagrid_buttons.attach(nextstu, 2, 1, 1, 1) #Update View with first Student in List updateview(None, combobox, newviewgrid) #Show the window window.show_all() #Fill the Grid for the first time and call this method to reload fillDataGrid()
def start(self, classname, builder, window): #Databaseconnection dataop = DataOp() con = dataop.opendatabase(classname) #Returns all UpperCat-Notes and the Final-Note as an array #Last Entry will be the Finalnote (if there is one :) ) def calculateOkFinal(id): dataarray = [] cur = con.cursor() #Calculating all Downcategories and save them to downcat with the Categorie-ID #Step One - Getting all Upper Cats data_upcats = cur.execute("select id, weight, name from catup order by weight desc") rowcounter = 1 columncounter = 0 finalnote = [] for upcats in data_upcats.fetchall(): #Step Two: Get all Down-Cats with this Upcat-ID data_downcats = cur.execute("select id, weight, name from catdown where upcat=?", (int(upcats[0]), )) downcats_notes = [] for downcats in data_downcats.fetchall(): #Step Three: Get all Notes from this DownCat and Upcat from actual Student data_notes = cur.execute("select id,weight ,name from notes where upcat=? and downcat=?", (upcats[0], downcats[0]),) weight_note = 0 note_calc = 0 for notes in data_notes.fetchall(): #Step Four: Getting the final note try: data_stunote = cur.execute("select id, note from notes_student where studentid=? and notesid=? and note!=16.0", (id, notes[0],)).fetchone()[1] # # SPECIAL: All Notes with 16.0 will not be calculatet!!!! Here beware by other Gradesystems!!! # # weight_note = weight_note + notes[1] note_calc = note_calc + data_stunote * notes[1] except: rowcounter = rowcounter + 1 #Saving all Downcategorie-Notes ID WEIGHT NOTE if weight_note > 0: downcats_notes.append([downcats[0], downcats[1], round(note_calc / weight_note, 2)]) #Calculating final Note for Uppercat note = 0 weight = 0 for finalupcat in downcats_notes: note = note + finalupcat[2] * finalupcat[1] weight = weight + finalupcat[1] #If a Note was calced than save it as Uppercat-Note if weight > 0: finalnote.append([upcats[1], round(note / weight, 2)]) dataarray.append(round(note / weight, 2)) #Last Notecalc: Final Note of the Student finalnotecalc = 0 weightfinal = 0 for finalnoteupcat in finalnote: finalnotecalc = finalnotecalc + finalnoteupcat[1] * finalnoteupcat[0] weightfinal = weightfinal + finalnoteupcat[0] #If all Notes are done: Save the final Note of the Student if weight > 0: dataarray.append(round(finalnotecalc / weightfinal, 2)) return dataarray #Returns an Array of all counted data def gettingCounts(studentid): dataarray = [] unknown = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=0", studentid).fetchone()[0]) leaveok = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=1", studentid).fetchone()[0]) school = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=2", studentid).fetchone()[0]) minusminus = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=3", studentid).fetchone()[0]) minus = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=4", studentid).fetchone()[0]) mid = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=5", studentid).fetchone()[0]) plus = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=6", studentid).fetchone()[0]) plusplus = dataarray.append(dataop.getdata(con, "select count(status) from status_stu_unit where studentid=? and status=7", studentid).fetchone()[0]) return dataarray #Fill the Grid with all Data from the actual database resp. Class def fillDataGrid(*args): #Get all the Grids :) datagrid_buttons = builder.get_object("datagrid_buttons") newviewgrid = builder.get_object("datagrid") #Clear the grid for child in newviewgrid.get_children(): newviewgrid.remove(child) #Clear the button-grid for child in datagrid_buttons.get_children(): datagrid_buttons.remove(child) #Adding Column-Infos #Images ue_r = Gtk.Image() ue_r.set_from_file("icons/quest_red.png") newviewgrid.attach(ue_r, 4, 0, 1, 1) #OK leaved e_g = Gtk.Image() e_g.set_from_file("icons/ok_green.png") newviewgrid.attach(e_g, 6, 0, 1, 1) #School-Event school_g = Gtk.Image() school_g.set_from_file("icons/school_green.png") newviewgrid.attach(school_g, 8, 0, 1, 1) #PLusPlus Work minusminus_g = Gtk.Image() minusminus_g.set_from_file("icons/minusminus_green.png") newviewgrid.attach(minusminus_g, 10, 0, 1, 1) #One Minus Work minus_g = Gtk.Image() minus_g.set_from_file("icons/minus_green.png") newviewgrid.attach(minus_g, 12, 0, 1, 1) #MIddle good work middle_g = Gtk.Image() middle_g.set_from_file("icons/middle_green.png") newviewgrid.attach(middle_g, 14, 0, 1, 1) #One Plus Work plus_g = Gtk.Image() plus_g.set_from_file("icons/plus_green.png") newviewgrid.attach(plus_g, 16, 0, 1, 1) #PLusPlus Work plusplus_g = Gtk.Image() plusplus_g.set_from_file("icons/plusplus_green.png") newviewgrid.attach(plusplus_g, 18, 0, 1, 1) #Getting UpCats cur = con.cursor() data_upcats = cur.execute("select short from catup order by weight desc") counter = 0 for upcats in data_upcats.fetchall(): label_ok = Gtk.Label() label_ok.set_markup("<b>" + upcats[0].encode("utf-8") + "</b>") newviewgrid.attach(label_ok, counter + 20, 0, 1, 1) counter = counter + 2 #Label Finalnote label_note = Gtk.Label() label_note.set_markup("<b>Abschlussnote</b>") newviewgrid.attach(label_note, counter + 22, 0, 1, 1) #Adding Spacer for i in xrange(3,23 + counter,2): templabel = Gtk.Label(" ") newviewgrid.attach(templabel, i, 0, 1, 1) #Adding Studentsnames - Postname, Prenames, Numbers and Buttons datas = dataop.getdata(con, "select id, name, prename, mail from students order by 2 asc", None) #Startfield of Rows startfield_rows = 1 for row in datas.fetchall(): templabel_numbers = Gtk.Label() templabel_postname = Gtk.Label() templabel_prename = Gtk.Label() templabel_numbers.set_markup(" <b><big>" + str(startfield_rows) + ".</big></b> ") templabel_postname.set_markup("<b><big>" + row[1].encode("utf-8") + "</big></b> ") templabel_prename.set_markup("<b><big>" + row[2].encode("utf-8") + "</big></b> ") #COLOR 0-65535 Gdk.Color(RED, GREEN, BLUE) if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) #Getting the Students Notes notes[LAST] = final notes, all before UpperCats notes = calculateOkFinal(row[0]) upcatcount = 0 cattogo = len(notes) - 1 for notes_to_label in range(cattogo): upcattemp = Gtk.Label(notes[notes_to_label]) if startfield_rows % 2 != 0: upcattemp.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(upcattemp, 20 + upcatcount, startfield_rows, 1, 1) upcatcount = upcatcount + 2 #Adding Final Note if cattogo > 0: finalnote = Gtk.Label() finalnote.set_markup("<b>" + str(notes[cattogo]) + "</b>") if startfield_rows % 2 != 0: finalnote.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(finalnote, 22 + upcatcount, startfield_rows, 1, 1) #Make the lines grey if 2nd if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) #Adding Grey or White Spacers for i in xrange(3,23 + counter,2): templabel = Gtk.Label(" ") if startfield_rows % 2 != 0: templabel.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(templabel, i, startfield_rows, 1, 1) #Adding Countet Data counts = gettingCounts(row[0]) rowspacer = 4 for countet in counts: templabel = Gtk.Label(str(countet)) if startfield_rows % 2 != 0: templabel.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(templabel, rowspacer, startfield_rows, 1, 1) rowspacer = rowspacer + 2 newviewgrid.attach(templabel_postname, 1, startfield_rows, 1, 1) newviewgrid.attach(templabel_prename, 2, startfield_rows, 1, 1) newviewgrid.attach(templabel_numbers, 0, startfield_rows, 1, 1) startfield_rows = startfield_rows + 1 #Show the window window.show_all() #Fill the Grid for the first time and call this method to reload fillDataGrid()
def start(self, classname, builder, window): #Databaseconnection dataop = DataOp() con = dataop.opendatabase(classname) ###################################################################################### # # # # CATEGORIE AREA START # ###################################################################################### #Saving new Upper-Categorie def savecatup(self, noteupwindow, catmanagewindow): #Getting Data from the Window name = builder.get_object("name").get_text().decode("utf-8") short = builder.get_object("short").get_text().decode("utf-8") weight = builder.get_object("weight").get_text().decode("utf-8") if len(name) == 0 or len(short) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte Daten korrekt eintragen!") messWindow.destroy() else: cur = con.cursor() #Count existing Units in the Datbase newid = dataop.getdata(con, "select count(id) from catup", None) if newid.fetchone()[0] == 0: try: cur.execute("insert into catup(id, name, short, weight) values (0, ?, ?, ?);", (name, short, int(weight),)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() else: try: cur.execute("insert into catup(id, name, short, weight) values ((SELECT max(id) FROM catup) + 1, ?, ?, ?);", (name, short, int(weight),)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() con.commit() noteupwindow.destroy() #Reload the Managewindow printupcats(catmanagewindow) printdowncats(catmanagewindow) #Saving new Down-Categorie def savecatdown(self, notedownwindow, catmanagewindow): #Getting Data from the Window name = builder.get_object("name").get_text().decode("utf-8") short = builder.get_object("short").get_text().decode("utf-8") weight = builder.get_object("weight").get_text().decode("utf-8") uppercatid = builder.get_object("comboupcat").get_active_id() if len(name) == 0 or len(short) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte Daten korrekt eintragen!") messWindow.destroy() else: cur = con.cursor() #Count existing Units in the Datbase newid = dataop.getdata(con, "select count(id) from catdown", None) if newid.fetchone()[0] == 0: try: cur.execute("insert into catdown(id, upcat, name, short, weight) values (0, ?, ?, ?, ?);", (int(uppercatid), name, short, int(weight),)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben oder Oberkategorie anlegen!") messWindow.destroy() else: try: cur.execute("insert into catdown(id, upcat, name, short, weight) values ((SELECT max(id) FROM catdown) + 1, ?, ?, ?, ?);", (int(uppercatid), name, short, int(weight),)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben oder Oberkategorie anlegen!") messWindow.destroy() con.commit() notedownwindow.destroy() #Reload the Managewindow printupcats(catmanagewindow) printdowncats(catmanagewindow) #Showing NOteUpAdd Window to prepare new Upper-Cat def addcat_up(self, managewindow): builder.add_from_file("gui/NoteUpPop.glade") addnoteup = builder.get_object("addnoteup") #Get Button-Object savedata = builder.get_object("addnoteup_save") savedata.connect("clicked", savecatup, addnoteup, managewindow) #Show New-Student-Popup addnoteup.show_all() #Showing NOteDownAdd Window to prepare new Down-Cat def addcat_down(self, managewindow): builder.add_from_file("gui/NoteDownPop.glade") addnotedown = builder.get_object("addnotedown") #Get Button-Object savedata = builder.get_object("savenotedown") savedata.connect("clicked", savecatdown, addnotedown, managewindow) #Loading all Upper-Cats and ad them to a Combo-Box uppeercats = builder.get_object("comboupcat") allupcat = dataop.getdata(con, "select id, name from catup order by weight desc", None) for upcats in allupcat.fetchall(): uppeercats.append(str(upcats[0]), upcats[1].encode("utf-8")) uppeercats.set_active(0) #Show New-Student-Popup addnotedown.show_all() #Close the manage-Window def closemanagewindow(self, managewindow): managewindow.destroy() #Updating Changes Catup and reload Grid def savechanges_catup(self, catup_changewindow, managewindow, id): name = builder.get_object("name").get_text().decode("utf-8") short = builder.get_object("short").get_text().decode("utf-8") weight = builder.get_object("weight").get_text().decode("utf-8") if len(name) == 0 or len(short) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte Daten korrekt eintragen!") messWindow.destroy() else: cur = con.cursor() #Count existing Units in the Datbase try: cur.execute("update catup set name=?, short=?, weight=? where id=?", (name, short, int(weight), id,)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() con.commit() catup_changewindow.destroy() printupcats(managewindow) printdowncats(managewindow) fillDataGrid() #Updating Changes Catdown and reload Grid def savechanges_catdown(self, catdown_changewindow, managewindow, id): name = builder.get_object("name").get_text().decode("utf-8") short = builder.get_object("short").get_text().decode("utf-8") weight = builder.get_object("weight").get_text().decode("utf-8") uppercatid = builder.get_object("comboupcat").get_active_id() if len(name) == 0 or len(short) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte Daten korrekt eintragen!") messWindow.destroy() else: cur = con.cursor() #Count existing Units in the Datbase try: cur.execute("update catdown set name=?, short=?, weight=?, upcat=? where id=?", (name, short, int(weight), uppercatid, id,)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() con.commit() catdown_changewindow.destroy() printupcats(managewindow) printdowncats(managewindow) fillDataGrid() #Starting workflow for changing a Upper-Categorie def changeupcat(self, id, managewindow, name, short, weight): builder.add_from_file("gui/NoteUpPop.glade") addnoteupchange = builder.get_object("addnoteup") builder.get_object("name").set_text(name) builder.get_object("short").set_text(short) builder.get_object("weight").set_text(str(weight)) #Get Button-Object savedata = builder.get_object("addnoteup_save") savedata.connect("clicked", savechanges_catup, addnoteupchange, managewindow, id) #Show New-Student-Popup addnoteupchange.show_all() #WORKFLOW FOR DOWN CATEGORIES def changedowncat(self, id, idup, managewindow, name, short, weight): builder.add_from_file("gui/NoteDownPop.glade") addnotedownchange = builder.get_object("addnotedown") builder.get_object("name").set_text(name) builder.get_object("short").set_text(short) builder.get_object("weight").set_text(str(weight)) #Loading all Upper-Cats and ad them to a Combo-Box uppeercats = builder.get_object("comboupcat") allupcat = dataop.getdata(con, "select id, name from catup order by weight desc", None) for upcats in allupcat.fetchall(): uppeercats.append(str(upcats[0]), upcats[1].encode("utf-8")) #Select the active Upper-ID uppeercats.set_active_id(str(idup)) #Get Button-Object savedata = builder.get_object("savenotedown") savedata.connect("clicked", savechanges_catdown, addnotedownchange, managewindow, id) #Show New-Student-Popup addnotedownchange.show_all() #Delete a Upper Cateogire and all Data wich is connected to (WARNGIN! Deletes Down-Cats and Notes!!! Check dataop.py) def delcatup(self, id, managewindow, name): messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.askokcancel("Warnung", "ACHTUNG! Alle Daten der Kategorie " + name + " werden UNWIDERRUFLICH gelöscht. Auch alle Noten und Unterkategorien! Fortfahren?") #Check for deleting or not if result == True: #Delete True - Delete the Uppercat and reload the Grid dataop.deleteCatUp(con, id) messWindow.destroy() #Reload Upper-Categories printupcats(managewindow) printdowncats(managewindow) else: messWindow.destroy() def delcatdown(self, id, managewindow, name): messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.askokcancel("Warnung", "ACHTUNG! Alle Daten der Kategorie " + name + " werden UNWIDERRUFLICH gelöscht. Auch alle Noten! Fortfahren?") #Check for deleting or not if result == True: #Delete True - Delete the Uppercat and reload the Grid dataop.deleteCatDown(con, id) messWindow.destroy() #Reload Upper-Categories printupcats(managewindow) printdowncats(managewindow) else: messWindow.destroy() #Print all Upper Categories def printupcats(managewindow): #Adding all Upper Categories upgrid = builder.get_object("catup_grid") #Clear the UpCatGrid for child in upgrid.get_children(): upgrid.remove(child) #Adding all Uppercategories to the Grid datas = dataop.getdata(con, "select id, name, short, weight from catup order by weight desc", None) counter = 1 for row in datas.fetchall(): templabel_counter = Gtk.Label() templabel_counter.set_markup("<b>" + " " + str(counter) + ".</b>") templabel_name = Gtk.Label() templabel_name.set_markup(" <b>" + str(row[1].encode("utf-8")) + "</b>") templabel_catshort = Gtk.Label() templabel_catshort.set_markup(" <b>" + str(row[2].encode("utf-8")) + "</b>") templabel_catweight = Gtk.Label() templabel_catweight.set_markup(" <b>" + str(row[3]) + "</b> ") #Buttons to change/delete the Categories #ChangeButton changebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/gear74.png") changebutton.set_size_request(10,10) changebutton.set_image(image) #Button to Label upgrid.attach(changebutton, 5, counter, 1, 1) #Add Action to the Button with id from actual student changebutton.connect("clicked", changeupcat, row[0], managewindow, str(row[1].encode("utf-8")), str(row[2].encode("utf-8")), row[3]) #DeleteButton deletebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/cancel19.png") deletebutton.set_size_request(10,10) deletebutton.set_image(image) #Button to Label upgrid.attach(deletebutton, 6, counter, 1, 1) #Add Action to the Button with id from actual student deletebutton.connect("clicked", delcatup, row[0], managewindow, str(row[1].encode("utf-8"))) upgrid.attach(templabel_counter, 1, counter, 1, 1) upgrid.attach(templabel_name, 2, counter, 1, 1) upgrid.attach(templabel_catshort, 3, counter, 1, 1) upgrid.attach(templabel_catweight, 4, counter, 1, 1) counter = counter + 1 managewindow.show_all() #Print all Upper Categories def printdowncats(managewindow): #Adding all Upper Categories downgrid = builder.get_object("catdown_grid") #Clear the UpCatGrid for child in downgrid.get_children(): downgrid.remove(child) #Adding all Uppercategories to the Grid datas = dataop.getdata(con, "select id, name, short, weight, upcat from catdown order by weight desc", None) counter = 1 for row in datas.fetchall(): #Getting Name of upper Categorie uppercatname = dataop.getdata(con, "select name from catup where id=?", row[4]).fetchone()[0] templabel_counter = Gtk.Label() templabel_counter.set_markup("<b>" + " " + str(counter) + ".</b>") templabel_name = Gtk.Label() templabel_name.set_markup(" <b>" + str(row[1].encode("utf-8")) + "</b>") templabel_catshort = Gtk.Label() templabel_catshort.set_markup(" <b>" + str(row[2].encode("utf-8")) + "</b>") templabel_catweight = Gtk.Label() templabel_catweight.set_markup(" <b>" + str(row[3]) + "</b> ") templabel_in = Gtk.Label() templabel_in.set_markup(" in ") templabel_uppercat = Gtk.Label() templabel_uppercat.set_markup("<b>" + uppercatname + "</b> ") #Buttons to change/delete the Categories #ChangeButton changebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/gear74.png") changebutton.set_size_request(10,10) changebutton.set_image(image) #Button to Label downgrid.attach(changebutton, 7, counter, 1, 1) #Add Action to the Button with id from actual student changebutton.connect("clicked", changedowncat, row[0], row[4], managewindow, str(row[1].encode("utf-8")), str(row[2].encode("utf-8")), row[3]) #DeleteButton deletebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/cancel19.png") deletebutton.set_size_request(10,10) deletebutton.set_image(image) #Button to Label downgrid.attach(deletebutton, 8, counter, 1, 1) #Add Action to the Button with id from actual student deletebutton.connect("clicked", delcatdown, row[0], managewindow, str(row[1].encode("utf-8"))) downgrid.attach(templabel_counter, 1, counter, 1, 1) downgrid.attach(templabel_name, 2, counter, 1, 1) downgrid.attach(templabel_catshort, 3, counter, 1, 1) downgrid.attach(templabel_catweight, 4, counter, 1, 1) downgrid.attach(templabel_in, 5, counter, 1, 1) downgrid.attach(templabel_uppercat, 6, counter, 1, 1) counter = counter + 1 managewindow.show_all() #Manage Categories def managecat(*args): builder.add_from_file("gui/ManageCat.glade") managewindow = builder.get_object("windowmanagecat") #Close-Button closewindow = builder.get_object("close_catmanage") closewindow.connect("clicked", closemanagewindow, managewindow) #New Upper-Cat newupcat = builder.get_object("new_upcat") newupcat.connect("clicked", addcat_up, managewindow) #New Down-Cat newdowncat = builder.get_object("new_downcat") newdowncat.connect("clicked", addcat_down, managewindow) printupcats(managewindow) printdowncats(managewindow) #Show Categoriemanagewindow managewindow.show_all() ###################################################################################### # # # # CATEGORIE AREA END # ###################################################################################### ###################################################################################### # # # # NOTE AREA START # ###################################################################################### #Saving a new Note def do_savenewnote(self, notewindow): #Getting all the Data name = builder.get_object("name").get_text().decode("utf-8") weight = builder.get_object("weight").get_text() if len(name) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Falsche Daten", "Bitte korrekte Daten eintragen") messWindow.destroy() else: upcat = builder.get_object("combo_catup").get_active_id() downcat = builder.get_object("combo_catdown").get_active_id() #Date date = builder.get_object("notedate").get_date() year = str(date[0]) #Make the Month userfriendly :) month = str(date[1]+1) day = str(date[2]) #Save Note cur = con.cursor() #Count existing Notes in the Datbase newid = dataop.getdata(con, "select count(id) from notes", None) if newid.fetchone()[0] == 0: try: cur.execute("insert into notes(id, name, weight, upcat, downcat, year, month, day) values (0, ?, ?, ?, ?, ?, ?, ?);", (name, int(weight), int(upcat), int(downcat), year, month, day)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() else: try: cur.execute("insert into notes(id, name, weight, upcat, downcat, year, month, day) values ((SELECT max(id) FROM notes) + 1, ?, ?, ?, ?, ?, ?, ?);", (name, int(weight), int(upcat), int(downcat), year, month, day)) except: messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.showinfo("Falsche Daten", "Bitte bei Gewicht nur ganze Zahlen eingeben!") messWindow.destroy() con.commit() notewindow.destroy() #Fill the new Grid fillDataGrid() #Updating a Note def do_updatenote(self, id, notewindow): #Getting all the Data name = builder.get_object("name").get_text().decode("utf-8") weight = builder.get_object("weight").get_text() if len(name) == 0 or len(weight) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Falsche Daten", "Bitte korrekte Daten eintragen") messWindow.destroy() else: upcat = builder.get_object("combo_catup").get_active_id() downcat = builder.get_object("combo_catdown").get_active_id() #Date date = builder.get_object("notedate").get_date() year = str(date[0]) #Make the Month userfriendly :) month = str(date[1]+1) day = str(date[2]) #Save Note cur = con.cursor() #Count existing Notes in the Datbase cur.execute("update notes set name=?, weight=?, upcat=?, downcat=?, year=?, month=?, day=? where id=?", (name, int(weight), upcat, downcat, year, month, day, id, )) con.commit() notewindow.destroy() #Fill the new Grid fillDataGrid() #Creating the NewNoteWindow def addnewnote(*args): builder.add_from_file("gui/NewNotePop.glade") notewindow = builder.get_object("addnote") #Loading all Upper-Cats and ad them to a Combo-Box uppercats = builder.get_object("combo_catup") allupcat = dataop.getdata(con, "select id, name from catup order by weight desc", None) for upcats in allupcat.fetchall(): uppercats.append(str(upcats[0]), upcats[1].encode("utf-8")) uppercats.set_active(0) #Loading all Down-Cats and ad them to a Combo-Box downcats = builder.get_object("combo_catdown") alldowncat = dataop.getdata(con, "select id, name from catdown order by weight desc", None) for downcat in alldowncat.fetchall(): downcats.append(str(downcat[0]), downcat[1].encode("utf-8")) downcats.set_active(0) #Adding Functionality to the Save-Button savebutton = builder.get_object("savenote") savebutton.connect("clicked", do_savenewnote, notewindow) #Show Categoriemanagewindow notewindow.show_all() #Update a Note def updatenote(self, noteid, studentid, notecombobox): #Update a Note cur = con.cursor() #Checking for a Note maybenote = cur.execute("select id from notes_student where notesid=? and studentid=?", (noteid, studentid,)).fetchone() #Getting new Note note = notecombobox.get_active() #Save a new note or update if maybenote == None: newid = dataop.getdata(con, "select count(id) from notes_student", None) if newid.fetchone()[0] == 0: cur.execute("insert into notes_student(id, notesid, studentid, note) values(0, ?, ?,?)", (noteid, studentid, float(note),)) else: cur.execute("insert into notes_student(id, notesid, studentid, note) values((SELECT max(id) FROM notes_student) + 1, ?, ?,?)", (noteid, studentid, float(note),)) else: cur.execute("update notes_student set note=? where notesid=? and studentid=?", (float(note), noteid, studentid,)) con.commit() fillDataGrid() #Delete a Note def deletenote(self, id, mainwindow, name): messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.askokcancel("Warnung", "ACHTUNG! Alle Daten der Noten " + str(name) + " werden UNWIDERRUFLICH gelöscht. Fortfahren?") messWindow.destroy() #Check for deleting or not if result == True: #Delete True - Delete the Note and reload the Grid dataop.deleteNoteComplete(con, id) fillDataGrid() def changenote(self, mainwindow, id, name, weight, upcat, downcateg, year, month, day): builder.add_from_file("gui/NewNotePop.glade") notewindow = builder.get_object("addnote") name = builder.get_object("name").set_text(name) weight = builder.get_object("weight").set_text(str(weight)) #Loading all Upper-Cats and ad them to a Combo-Box uppercats = builder.get_object("combo_catup") allupcat = dataop.getdata(con, "select id, name from catup order by weight desc", None) counter = 0 for upcats in allupcat.fetchall(): uppercats.append(str(upcats[0]), upcats[1].encode("utf-8")) if upcats[0] == upcat: uppercats.set_active(counter) counter = counter + 1 #Loading all Down-Cats and ad them to a Combo-Box downcats = builder.get_object("combo_catdown") alldowncat = dataop.getdata(con, "select id, name from catdown order by weight desc", None) counter = 0 for downcat in alldowncat.fetchall(): downcats.append(str(downcat[0]), downcat[1].encode("utf-8")) if downcat[0] == downcateg: downcats.set_active(counter) counter = counter + 1 #Date date = builder.get_object("notedate") date.select_month(int(month) - 1, int(year)) date.select_day(int(day)) #Adding Functionality to the Save-Button savebutton = builder.get_object("savenote") savebutton.connect("clicked", do_updatenote, id, notewindow) #Show Categoriemanagewindow notewindow.show_all() #Loading all Notes def loadNotes(datagrid, mainwindow): #datas = dataop.getdata(con, "select id, name, weight, upcat, downcat, year, month, day from notes order by year, month, day asc", None) datas = dataop.getdata(con, "select id, name, weight, upcat, downcat, year, month, day from notes order by name asc", None) rowcount = 4 notecounter = 0 for row in datas.fetchall(): #Getting Names from Categories upcat = dataop.getdata(con, "select short, weight from catup where id=?", row[3]).fetchone() downcat = dataop.getdata(con, "select short, weight from catdown where id=?", row[4]).fetchone() notegrid = Gtk.Grid() notegrid_snd = Gtk.Grid() templabel = Gtk.Label() templabel.set_markup("<b><big>" + row[1] + "</big></b>\n<b>Gewicht: " + str(row[2]) + "\n" + row[7] + "."+ row[6] + "."+ row[5] + "\nObKa: " + str(upcat[0]) + " | " + str(upcat[1]) + "\nUnKa: " + str(downcat[0]) + " | " + str(downcat[1]) + "</b>") notegrid.attach(templabel, 0, 0, 1, 1) #Buttons to change/delete the Categories #ChangeButton changebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/gear74.png") changebutton.set_size_request(10,10) changebutton.set_image(image) #Button to Label notegrid_snd.attach(changebutton, 0, 0, 1, 1) #Add Action to the Button with id from actual student changebutton.connect("clicked", changenote, mainwindow, row[0], str(row[1].encode("utf-8")), row[2],row[3],row[4],row[5],row[6],row[7],) #DeleteButton deletebutton = Gtk.Button() image = Gtk.Image() image.set_from_file("icons/cancel19.png") deletebutton.set_size_request(10,10) deletebutton.set_image(image) #Button to Label notegrid_snd.attach(deletebutton, 1, 0, 1, 1) #Add Action to the Button with id from actual student deletebutton.connect("clicked", deletenote, row[0], mainwindow, str(row[1].encode("utf-8"))) notegrid.attach(notegrid_snd, 0, 1, 1, 1) datagrid.attach(notegrid, rowcount, 0, 1, 1) #notes_student (id INT PRIMARY KEY NOT NULL, notesid INT NOT NULL, studentid INT NOT NULL, note DOUBLE NOT NULL) data_students = dataop.getdata(con, "select id from students order by name asc", None) studentcounter = 1 average_note = 0 #Needed in case that a student as no note corrector = 0 for student in data_students.fetchall(): stugrid = Gtk.Grid() cur = con.cursor() stunote = cur.execute("select note from notes_student where notesid=? and studentid=?", (int(row[0]), int(student[0]),)).fetchone() spacer = Gtk.Label(" ") if stunote == None: notecombobox = giv15to0ComboBox() stugrid.attach(notecombobox, rowcount, studentcounter, 1, 1) stugrid.attach(spacer, rowcount + 1, studentcounter, 1, 1) notecombobox.connect("changed", updatenote, int(row[0]), int(student[0]), notecombobox) else: notecombobox = giv15to0ComboBox() notecombobox.set_active(stunote[0]) #Calculate Average-Note and prevent for adding "na" (16) if stunote[0] != 16.0: average_note = average_note + stunote[0] else: corrector = corrector + 1 stugrid.attach(notecombobox, rowcount, studentcounter, 1, 1) stugrid.attach(spacer, rowcount + 1, studentcounter, 1, 1) notecombobox.connect("changed", updatenote, int(row[0]), int(student[0]), notecombobox) if studentcounter % 2 != 0: stugrid.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.8, 0.8, 0.8, 1)) datagrid.attach(stugrid, rowcount, studentcounter, 1, 1) studentcounter = studentcounter + 1 #Adding Average-Note under the Table diff = studentcounter - corrector - 1 average_note = round(average_note / diff, 2) average = Gtk.Label("Durchschnitt: " + str(average_note)) datagrid.attach(average, rowcount, studentcounter + 1, 1, 1) rowcount = rowcount + 2 notecounter = notecounter + 1 #If four Notes reached print all Names of the Students again if notecounter % 4 == 0: #Adding Studentsnames - Postname, Prenames, Numbers and Buttons datas = dataop.getdata(con, "select id, name, prename, mail from students order by 2 asc", None) #Startfield of Rows startfield_rows = 1 for row in datas.fetchall(): templabel_numbers = Gtk.Label() templabel_postname = Gtk.Label() templabel_prename = Gtk.Label() templabel_numbers.set_text(" " + str(startfield_rows) + ". ") templabel_postname.set_text(row[1].encode("utf-8") + " ") templabel_prename.set_text(row[2].encode("utf-8") + " ") #COLOR 0-65535 Gdk.Color(RED, GREEN, BLUE) if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) datagrid.attach(templabel_postname, rowcount + 1, startfield_rows, 1, 1) datagrid.attach(templabel_prename, rowcount + 2, startfield_rows, 1, 1) datagrid.attach(templabel_numbers, rowcount, startfield_rows, 1, 1) startfield_rows = startfield_rows + 1 rowcount = rowcount + 3 #Reload the Mainwindow mainwindow.show_all() #Gives a 0 to 15 Combobox def giv15to0ComboBox(): notes = Gtk.ListStore(int, str) for note in range(16): notes.append([note, str(note)]) notes.append([17, "na"]) combobox = Gtk.ComboBox.new_with_model_and_entry(notes) combobox.set_entry_text_column(1) return combobox ###################################################################################### # # # # NOTE AREA ENDE # ###################################################################################### #Fill the Grid with all Data from the actual database resp. Class def fillDataGrid(*args): #Get all the Grids :) datagrid_buttons = builder.get_object("datagrid_buttons") newviewgrid = builder.get_object("datagrid") #Clear the grid for child in newviewgrid.get_children(): newviewgrid.remove(child) #Clear the button-grid for child in datagrid_buttons.get_children(): datagrid_buttons.remove(child) #Adding New Note-Button addnote = Gtk.Button.new_with_label("Neue Note") addnote.connect("clicked", addnewnote) datagrid_buttons.attach(addnote, 0, 1, 1, 1) #Button for manage Categories kat_down = Gtk.Button("Kategorien verwalten") kat_down.connect("clicked", managecat) datagrid_buttons.attach(kat_down, 1, 1, 1, 1) #Adding Studentsnames - Postname, Prenames, Numbers and Buttons datas = dataop.getdata(con, "select id, name, prename, mail from students order by 2 asc", None) #Startfield of Rows startfield_rows = 1 for row in datas.fetchall(): templabel_numbers = Gtk.Label() templabel_postname = Gtk.Label() templabel_prename = Gtk.Label() templabel_numbers.set_text(" " + str(startfield_rows) + ". ") templabel_postname.set_text(row[1].encode("utf-8") + " ") templabel_prename.set_text(row[2].encode("utf-8") + " ") #COLOR 0-65535 Gdk.Color(RED, GREEN, BLUE) if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(templabel_postname, 1, startfield_rows, 1, 1) newviewgrid.attach(templabel_prename, 2, startfield_rows, 1, 1) newviewgrid.attach(templabel_numbers, 0, startfield_rows, 1, 1) startfield_rows = startfield_rows + 1 #Show the window window.show_all() loadNotes(newviewgrid, window) #Fill the Grid for the first time and call this method to reload fillDataGrid()
def start(self, classname, builder, window): #Databaseconnection dataop = DataOp() con = dataop.opendatabase(classname) #Functions for adding, importing and editing students def do_addstudent(*args): #Function to save a new Student def save_new_student(*args): name = builder.get_object("student_postname").get_text().decode("utf-8") prename = builder.get_object("student_prename").get_text().decode("utf-8") mail = builder.get_object("student_mail").get_text().decode("utf-8") #Checking the data if len(name) == 0 or len(prename) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Falsche Eingabe", "Bitte mindestens Vorname und Nachname eingeben.") messWindow.destroy() #Check of so save new student to database else: #Insert all Datas cur = con.cursor() #Count existing Students in the Datbase newid = dataop.getdata(con, "select count(id) from students", None) if newid.fetchone()[0] == 0: cur.execute("insert into students(id, name, prename, mail) values (0, ?, ?, ?);", (name, prename, mail,)) else: cur.execute("insert into students(id, name, prename, mail) values ((SELECT max(id) FROM students) + 1, ?, ?, ?);", (name, prename, mail,)) con.commit() #Destroy Input-Window addstudentwindow.destroy() #Reload the DataGrid fillDataGrid() #Show New-Student-Popup builder.add_from_file("gui/NewStudentPop.glade") addstudentwindow = builder.get_object("addstudentwindow") addstudentwindow.show_all() savebutton = builder.get_object("addstudent_save") savebutton.connect("clicked", save_new_student) #Function to save a new Student def save_new_student_csv(postname, prename, mail): #Insert all Datas cur = con.cursor() #Count existing Students in the Datbase newid = dataop.getdata(con, "select count(id) from students", None) if newid.fetchone()[0] == 0: cur.execute("insert into students(id, name, prename, mail) values (0, ?, ?, ?);", (postname, prename, mail,)) else: cur.execute("insert into students(id, name, prename, mail) values ((SELECT max(id) FROM students) + 1, ?, ?, ?);", (postname, prename, mail,)) con.commit() #Reload the DataGrid fillDataGrid() #Destroy checkwindow def quit_checkwindow(self, another, checkwindow): checkwindow.destroy() #Destroy the CSV-Window def abort_savecsv(self, importcsvwin): importcsvwin.destroy() #Save all new Students def savecsv(self, importcsvwin, counter): #Getting the Students-Data from the Grid grid = builder.get_object("newstudents") for newstu in range(counter): if newstu > 0: prename = grid.get_child_at(3, newstu).get_text().decode("utf-8") postname = grid.get_child_at(5, newstu).get_text().decode("utf-8") mail = grid.get_child_at(7, newstu).get_text().decode("utf-8") save_new_student_csv(postname, prename, mail) #Reload the Grid fillDataGrid() importcsvwin.destroy() #Import a lot of students from a csv-File def do_importstudents(*args): dialog = Gtk.FileChooserDialog("Klassendatei wählen", None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) response = dialog.run() if response == -6: dialog.destroy() elif response == -5: #Read CSV-File filename = argv filename = str(dialog.get_filename()) cr = csv.reader(open(filename,"rb")) #Load GUI builder.add_from_file("gui/ImportCSV.glade") importcsvwin = builder.get_object("importcsv") csvgrid = builder.get_object("newstudents") #Read all Data and prepare Check-Window counter = 1 for row in cr: templabel_numb = Gtk.Label(str(counter) + "." ) templabel_postname = Gtk.Label(str(row[0])) templabel_prename = Gtk.Label(str(row[1])) templabel_mail = Gtk.Label(str(row[2])) space1 = Gtk.Label(" ") space2 = Gtk.Label(" ") space3 = Gtk.Label(" ") #If 2nd row --> make it grey :) if counter % 2 != 0: templabel_numb.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_mail.modify_bg(0, Gdk.Color(52000, 52000, 52000)) space1.modify_bg(0, Gdk.Color(52000, 52000, 52000)) space2.modify_bg(0, Gdk.Color(52000, 52000, 52000)) space3.modify_bg(0, Gdk.Color(52000, 52000, 52000)) #Attach all Labels to the Grid csvgrid.attach(templabel_numb, 1, counter, 1, 1) csvgrid.attach(space1, 2, counter, 1, 1) csvgrid.attach(templabel_postname, 3, counter, 1, 1) csvgrid.attach(space2, 4, counter, 1, 1) csvgrid.attach(templabel_prename, 5, counter, 1, 1) csvgrid.attach(space3, 6, counter, 1, 1) csvgrid.attach(templabel_mail, 7, counter, 1, 1) counter = counter + 1 #Adding Button-Functionality abort = builder.get_object("abort") abort.connect("clicked", abort_savecsv, importcsvwin) savecsvbutton = builder.get_object("savecsv") savecsvbutton.connect("clicked", savecsv, importcsvwin, counter) #Show New-Student-Popup importcsvwin.show_all() dialog.destroy() #Save Update Data from Student def saveupdatedata(self, id, windowtodestroy): name = builder.get_object("student_postname").get_text().decode("utf-8") prename = builder.get_object("student_prename").get_text().decode("utf-8") mail = builder.get_object("student_mail").get_text().decode("utf-8") #Checking the data if len(name) == 0 or len(prename) == 0: messWindow = Tkinter.Tk() messWindow.wm_withdraw() tkMessageBox.showinfo("Falsche Eingabe", "Bitte mindestens Vorname und Nachname eingeben.") messWindow.destroy() #Check of so save new student to database else: #Update all Datas cur = con.cursor() cur.execute("UPDATE students SET name=?, prename=?, mail=? WHERE id=?", (name, prename, mail, id)) con.commit() #Destroy Input-Window windowtodestroy.destroy() #Reload the DataGrid fillDataGrid() def deletestudent(self, id, prename, postname): messWindow = Tkinter.Tk() messWindow.wm_withdraw() result = tkMessageBox.askokcancel("Warnung", "ACHTUNG! Alle Daten von " + prename.encode("utf-8") + " " + postname.encode("utf-8") + " werden UNWIDERRUFLICH gelöscht. Fortfahren?") messWindow.destroy() #Check for deleting or not if result == True: #Delete True - Call main Student-Delete-Funktion and give ID dataop.deleteStudentComplete(con, id) fillDataGrid() #Changes Data from a Student, needs Button and id from a student def changedata(self, id, data_post, data_pre, data_mail): builder.add_from_file("gui/NewStudentPop.glade") addstudentwindow = builder.get_object("addstudentwindow") #Adding Data into Textfields prename = builder.get_object("student_prename") postname = builder.get_object("student_postname") mail = builder.get_object("student_mail") prename.set_text(data_pre.encode("utf-8")) postname.set_text(data_post.encode("utf-8")) mail.set_text(data_mail.encode("utf-8")) #Get Button-Object savedata = builder.get_object("addstudent_save") savedata.connect("clicked", saveupdatedata, id, addstudentwindow) #Show New-Student-Popup addstudentwindow.show_all() #Fill the Grid with all Data from the actual database resp. Class def fillDataGrid(*args): #Get all the Grids :) datagrid_buttons = builder.get_object("datagrid_buttons") newviewgrid = builder.get_object("datagrid") #Clear the grid for child in newviewgrid.get_children(): newviewgrid.remove(child) #Clear the button-grid for child in datagrid_buttons.get_children(): datagrid_buttons.remove(child) #Adding Buttons in Top-Area to add Students or import a csv-List (LATER!!) addstudents = Gtk.Button.new_with_label("Neuer Schüler") addstudents.connect("clicked", do_addstudent) datagrid_buttons.attach(addstudents, 0, 1, 1, 1) importstudents = Gtk.Button("Import CSV") datagrid_buttons.attach(importstudents, 1, 1, 1, 1) importstudents.connect("clicked", do_importstudents) #Adding Studentsnames - Postname, Prenames, Numbers and Buttons datas = dataop.getdata(con, "select id, name, prename, mail from students order by 2 asc", None) #Startfield of Rows startfield_rows = 1 for row in datas.fetchall(): templabel_numbers = Gtk.Label() templabel_postname = Gtk.Label() templabel_prename = Gtk.Label() templabel_numbers.set_text(" " + str(startfield_rows) + ". ") templabel_postname.set_text(row[1].encode("utf-8") + " ") templabel_prename.set_text(row[2].encode("utf-8") + " ") #COLOR 0-65535 Gdk.Color(RED, GREEN, BLUE) if startfield_rows % 2 != 0: templabel_postname.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_prename.modify_bg(0, Gdk.Color(52000, 52000, 52000)) templabel_numbers.modify_bg(0, Gdk.Color(52000, 52000, 52000)) newviewgrid.attach(templabel_postname, 1, startfield_rows, 1, 1) newviewgrid.attach(templabel_prename, 3, startfield_rows, 1, 1) newviewgrid.attach(templabel_numbers, 0, startfield_rows, 1, 1) #Button to change changebutton = Gtk.Button() changebutton.set_name("button_" + str(row[0])) image = Gtk.Image() image.set_from_file("icons/gear74.png") changebutton.set_size_request(10,10) changebutton.set_image(image) #Button to Label newviewgrid.attach(changebutton, 4, startfield_rows, 1, 1) #Add Action to the Button with id from actual student changebutton.connect("clicked", changedata, row[0], row[1], row[2], row[3]) #Button to delete all Students Data deletebutton = Gtk.Button() deletebutton.set_name("delete_" + str(row[0])) image = Gtk.Image() image.set_from_file("icons/cancel19.png") deletebutton.set_size_request(10,10) deletebutton.set_image(image) #Button to Label newviewgrid.attach(deletebutton, 5, startfield_rows, 1, 1) #Add Action to the Button with id from actual student deletebutton.connect("clicked", deletestudent, row[0], row[1], row[2]) startfield_rows = startfield_rows + 1 #Show the window window.show_all() #Fill the Grid for the first time and call this method to reload fillDataGrid()