Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sys import exit
- import builtins
- import sqlite3
- from tkinter import *
- import tkinter.ttk as ttk
- from tkinter import messagebox
- import re
- def vp_start_guilogin():
- '''starts the login screen'''
- global val, w, root
- root = Tk()
- root.title('Login')
- root.geometry('254x151+367+288')
- w = Login (root)
- root.mainloop()
- def vp_start_gui(database):
- '''Starts the main window'''
- global val, w, root
- root = Tk()
- root.title('Courses and students database. Logged in as: '+database[0:-11])
- root.geometry('1200x600')
- w = Courses_and_students_database (root,database)
- root.mainloop()
- def isin(object_,array):
- '''returns TRUE or FALSE if the object_ is found in the array'''
- i = 0
- found = False
- while i < (len(array)) and not found:
- if object_ == array[i]:
- found = True
- i +=1
- return found
- def getStrVarValues(StrVars):
- '''returns the string value for a given list of StrVars'''
- StrVarValues = []
- for StrVar in StrVars:
- StrVarValue = StrVar[0].get()
- StrVarValues.append(StrVarValue)
- return StrVarValues
- def Cleartreeview(tree):
- '''clears a treeview of all data for a given treeview'''
- for i in range(len(tree.get_children())):
- tree.delete(tree.get_children()[0])
- def populatetreeview(treeview,data):
- '''populates a treeview with given data for a given treeview'''
- Cleartreeview(treeview)
- for i in range(len(data)):
- treeview.focus(treeview.insert('', 0, text=str(i), values=(data[i])))
- def TODO():
- print("not done yet")
- class xwidget(ttk.Widget):
- '''a class for creating any type of widget'''
- def __init__(self,object,parent,*places,**kw):
- super(xwidget,self).__init__(parent,object,kw)
- if len(places) == 2:
- self.place(relx=places[0],rely=places[1])
- if len(places) == 4:
- self.place(relx=places[0],rely=places[1],relheight=places[2],relwidth=places[3])
- class Courses_and_students_database:
- '''class for the main window'''
- def __init__(self,master,databasename):
- self.conn = sqlite3.connect(databasename)
- self.curs = self.conn.cursor()
- self.set_Tk_var()
- self.createGUI(master)
- def createGUI(self,master):
- '''constructs the GUI'''
- style = ttk.Style()
- theme = style.theme_use()
- default = style.lookup(theme, 'background')
- master.configure(background=default)
- #master.resizable(FALSE,FALSE)
- #--------------------------Menu-------------------------------------------------
- self.topmenu = Menu(master,font=('MS Sans Serif',10,'normal','roman',))
- master.configure(menu = self.topmenu)
- self.topmenu_user = Menu(master,tearoff=0,font=('MS Sans Serif',10,'normal','roman',))
- self.topmenu.add_cascade(label="User",menu=self.topmenu_user)
- self.topmenu_user.add_command(label="Logout",command=lambda:self.logout())
- self.topmenu_user.add_separator()
- self.topmenu_user.add_command(label="Change Password",command=TODO())
- #---------------------------main tabs setup----------------------------------------------------
- self.win = ttk.Notebook(master)
- self.win.place(relx=0.0,rely=0.0,relheight=1.01,relwidth=1.01)
- self.win.configure(takefocus="")
- self.win.configure(width="1205")
- self.win.configure(height="606")
- self.win_couplepage = Frame(self.win)
- self.win_couplepage.configure(background=default)
- self.win.add(self.win_couplepage, padding=3)
- self.win.tab(0, text="Couples",underline="-1",)
- self.win_coursepage = Frame(self.win)
- self.win_coursepage.configure(background=default)
- self.win.add(self.win_coursepage, padding=3)
- self.win.tab(1, text="Courses",underline="-1",)
- self.win.bind("<<NotebookTabChanged>>",lambda e:self.reloadtreeviews())
- #---------------------------\\Tab one, couples//---------------------------------------------
- self.win_couplepage_displayallbutton = xwidget("ttk::button",self.win_couplepage,0.4,0.78,text="Display all",takefocus="",command= lambda:populatetreeview(self.win_couplepage_coupletreeview,self.getcouples()))
- self.win_couplepage_searchbox = xwidget("ttk::entry",self.win_couplepage,0.18,0.83,0.04,0.21,takefocus="",cursor="ibeam",textvariable=self.searchF)
- self.win_couplepage_searchbutton = xwidget("ttk::button",self.win_couplepage,0.4,0.83,takefocus="",text="Search",command= lambda:populatetreeview(self.win_couplepage_coupletreeview,(self.searchforcouple(int(self.searchV.get()),self.searchF.get()))))
- self.win_couplepage_radiobutton1 = xwidget("ttk::radiobutton",self.win_couplepage,0.03,0.9,0.04,0.08,takefocus="",variable=self.searchV,value="1",text="By surname")
- self.win_couplepage_radiobutton2 = xwidget("ttk::radiobutton",self.win_couplepage,0.13,0.94,0.04,0.12,takefocus="",variable=self.searchV,value="2",text="By phone number")
- self.win_couplepage_radiobutton3 = xwidget("ttk::radiobutton",self.win_couplepage,0.03,0.94,0.04,0.08,takefocus="",variable=self.searchV,value="3",text="By address")
- self.win_couplepage_radiobutton4 = xwidget("ttk::radiobutton",self.win_couplepage,0.13,0.9,0.04,0.08,takefocus="",variable=self.searchV,value="4",text="By firstname")
- self.win_couplepage_radiobutton5 = xwidget("ttk::radiobutton",self.win_couplepage,0.23,0.9,0.04,0.08,takefocus="",variable=self.searchV,value="5",text="By mobile no.")
- self.win_couplepage_radiobutton6 = xwidget("ttk::radiobutton",self.win_couplepage,0.23,0.94,0.04,0.08,takefocus="",variable=self.searchV,value="6",text="By email")
- self.win_couplepage_coupletreeview = ScrolledTreeView (self.win_couplepage, columns=('coupleID','Wfirstname','Surname',"Wmobilenumber",'Wemailaddress','Pfirstname',"Psurname","Pmobilenumber","Pemailaddress"),show="headings")
- self.win_couplepage_coupletreeview.place(relx=0.02,rely=0.02,relheight=0.75
- ,relwidth=0.45)
- self.win_couplepage_coupletreeview.configure(takefocus="0")
- self.win_couplepage_coupletreeview.configure(height="4")
- self.win_couplepage_coupletreeview.configure(takefocus="0")
- self.win_couplepage_coupletreeview.column(0, width=65, anchor='center')
- self.win_couplepage_coupletreeview.column(1, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(2, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(3, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(4, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(5, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(6, width=120, anchor='center')
- self.win_couplepage_coupletreeview.column(7, width=90, anchor='center')
- self.win_couplepage_coupletreeview.column(8, width=90, anchor='center')
- self.win_couplepage_coupletreeview.heading('coupleID', text='Couple ID')
- self.win_couplepage_coupletreeview.heading('Wfirstname', text="Woman's name")
- self.win_couplepage_coupletreeview.heading('Surname', text="Surname")
- self.win_couplepage_coupletreeview.heading("Wmobilenumber", text='Mobile no.')
- self.win_couplepage_coupletreeview.heading('Pfirstname', text="Partner's name")
- self.win_couplepage_coupletreeview.heading('Psurname', text="Surname")
- self.win_couplepage_coupletreeview.heading('Pmobilenumber', text="Mobile no.")
- self.win_couplepage_coupletreeview.heading('Pemailaddress', text="Email address")
- self.win_couplepage_coupletreeview.heading('Wemailaddress', text="Email address")
- self.win_couplepage_coupletreeview.bind("<<TreeviewSelect>>",lambda e:self.couplesshowdetails())
- self.win_couplepage_addcouplebutton = xwidget("ttk::button",self.win_couplepage,0.06,0.78,takefocus="",text="Add couple",command=lambda:self.addupdate([self.getidno(0,self.couplesdb)],self.fieldlist,"Couples",self.reloadcouples))
- self.win_couplepage_removecouplebutton = xwidget("ttk::button",self.win_couplepage,0.13,0.78,takefocus="",text="Remove couple",command=lambda:self.removeupdate(self.fieldlist,"Couples","CouplesID",self.reloadcouples,self.win_couplepage_editcoupleframe_notesframe_notestextbox))
- self.win_couplepage_editcoupleframe = xwidget("ttk::labelframe",self.win_couplepage,0.48,0.02,0.96,0.5,text="Edit couple",width="605",height="555",takefocus="0")
- self.win_couplepage_editcoupleframe_savebutton = xwidget("ttk::button",self.win_couplepage_editcoupleframe,0.02,0.94,command=lambda:self.editupdate(self.fieldlist,"Couples",self.reloadcouples,self.win_couplepage_editcoupleframe_notesframe_notestextbox),text="Save")
- self.win_couplepage_editcoupleframe_clearfieldsbutton = xwidget("ttk::button",self.win_couplepage_editcoupleframe,0.2,0.94,takefocus="",text="Clear",command=lambda:self.Clearentries())
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook = ttk.Notebook(self.win_couplepage_editcoupleframe)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.place(relx=0.02,rely=0.01,relheight=0.64
- ,relwidth=0.97)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.configure(takefocus="",width="584",height="356")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab = Frame(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab.configure(background=default)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.add(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab, padding=3)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.tab(0, text="Contact Details",underline="-1",)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab = Frame(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab.configure(background=default)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.add(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab, padding=3)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook.tab(1, text="Courses",underline="-1",)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe = xwidget("ttk::labelframe",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab,0.02,0.03,0.44,0.46,text="Woman",width="265",height="315")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_firstnamelabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.0,0.02,0.17,0.23,text="Firstname")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_firstnameentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.35,0.03,0.17,0.61,takefocus="",textvariable=self.Wfirstname[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_surnamelabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.0,0.26,0.17,0.21,text="Surname")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_surnameentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.35,0.28,0.17,0.61,takefocus="",textvariable=self.Wsurname[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_mobilenumberlabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.0,0.5,0.17,0.35,text="Mobile number")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_mobilenumberentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.35,0.51,0.17,0.61,takefocus="",textvariable=self.Wmobilenumber[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_emaillabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.0,0.74,0.17,0.31,text="Email address")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe_emailentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_womanframe,0.35,0.75,0.17,0.61,takefocus="",textvariable=self.Wemailaddress[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe = xwidget("ttk::labelframe",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab,0.48,0.03,0.44,0.51,text="Partner",width="295",height="145")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_firstnamelabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.0,0.02,0.17,0.23,text="Firstname")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_firstnameentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.35,0.03,0.17,0.61,takefocus="",textvariable=self.Pfirstname[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_surnamelabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.0,0.26,0.17,0.21,text="Surname")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_surnameentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.35,0.28,0.17,0.61,takefocus="",textvariable=self.Psurname[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_mobilenumberlabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.0,0.5,0.17,0.35,text="Mobile number")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_mobilenumberentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.35,0.51,0.17,0.61,takefocus="",textvariable=self.Pmobilenumber[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_emaillabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.0,0.74,0.17,0.31,text="Email address")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe_emailentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_partnerframe,0.35,0.75,0.17,0.61,takefocus="",textvariable=self.Pemailaddress[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe = xwidget("ttk::labelframe",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab,0.48,0.48,0.5,0.51,text="Home address",width="295",height="165")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_line1label = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.05,0.12,relief="flat",text="Line 1")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_line1entry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.24,0.12,0.13,0.66,takefocus="",textvariable=self.address_line1[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_line2label = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.05,0.3,relief="flat",text="Line 2")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_line2entry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.24,0.3,0.13,0.66,takefocus="",textvariable=self.address_line2[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_townlabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.05,0.48,relief="flat",text="Town")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_townentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.24,0.48,0.13,0.66,takefocus="",textvariable=self.address_town[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_countylabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.05,0.67,relief="flat",text="County")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_countyentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.24,0.67,0.13,0.66,takefocus="",textvariable=self.address_county[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_postcodelabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.05,0.85,relief="flat",text="Postcode")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe_postcodeentry = xwidget("ttk::entry",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_addressframe,0.24,0.85,0.13,0.66,takefocus="",textvariable=self.address_postcode[0],cursor="ibeam")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_avaiablecourseslabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab,0.14,0.02,relief="flat",text="Available Courses")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview = ScrolledTreeView (self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab, columns=('courseid','coursetype','cstartdate','cenddate'),show="headings")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.place(relx=0.01,rely=0.09
- ,relheight=0.9,relwidth=0.41)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.configure(height="4")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.configure(takefocus="ttk::takefocus")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.column(0, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.column(1, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.column(2, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.column(3, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.heading('courseid', text='Course no')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.heading('coursetype', text='Course type')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.heading('cstartdate', text="Start date")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.heading('cenddate', text="End date")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_detailstab_enrolledcourseslabel = xwidget("ttk::label",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab,0.72,0.02,relief="flat",text="Enrolled Courses")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview = ScrolledTreeView (self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab, columns=('courseid','coursetype','cstartdate','cenddate'),show="headings")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.place(relx=0.58,rely=0.09
- ,relheight=0.9,relwidth=0.41)
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.configure(height="4")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.configure(takefocus="ttk::takefocus")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.column(0, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.column(1, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.column(2, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.column(3, width=75, anchor='center')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.heading('courseid', text='Course no')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.heading('coursetype', text='Course type')
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.heading('cstartdate', text="Start date")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.heading('cenddate', text="End date")
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolbutton = xwidget("ttk::button",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab,0.43,0.47,text="Enroll =>",command=lambda:self.enrollupdate(self.coupleID,self.Acourses[len(self.Acourses)-self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.index(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview.focus())-1][0]))
- self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_unenrolbutton = xwidget("ttk::button",self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab,0.43,0.56,text="<= Unenroll",command=lambda:self.unenrollupdate(self.coupleID,self.Ecourses[len(self.Ecourses)-self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.index(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview.focus())-1][0]))
- self.win_couplepage_editcoupleframe_notesframe = xwidget("ttk::labelframe",self.win_couplepage_editcoupleframe,0.02,0.68,0.24,0.97,text="Notes",width="585",height="135")
- self.win_couplepage_editcoupleframe_notesframe_notestextbox = ScrolledText (self.win_couplepage_editcoupleframe_notesframe)
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.place(relx=0.02,rely=0.15,relheight=0.81
- ,relwidth=0.96)
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.configure(background="white")
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.configure(height="3")
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.configure(width="10")
- #------------------------\\\Tab two courses///-------------------------------
- self.win_coursepage_coursetreeview = ScrolledTreeView (self.win_coursepage, columns=('courseID','coursetype','cstartdate','cenddate',"cvenue",'cnumberofcouples'),show="headings")
- self.win_coursepage_coursetreeview.place(relx=0.02,rely=0.02,relheight=0.45,relwidth=0.45)
- self.win_coursepage_coursetreeview.configure(takefocus="0")
- self.win_coursepage_coursetreeview.configure(height="4")
- self.win_coursepage_coursetreeview.configure(takefocus="0")
- self.win_coursepage_coursetreeview.column(0, width=65, anchor='center')
- self.win_coursepage_coursetreeview.column(1, width=90, anchor='center')
- self.win_coursepage_coursetreeview.column(2, width=90, anchor='center')
- self.win_coursepage_coursetreeview.column(3, width=90, anchor='center')
- self.win_coursepage_coursetreeview.column(4, width=90, anchor='center')
- self.win_coursepage_coursetreeview.column(5, width=90, anchor='center')
- self.win_coursepage_coursetreeview.heading('courseID', text='ID')
- self.win_coursepage_coursetreeview.heading('coursetype', text='Course type')
- self.win_coursepage_coursetreeview.heading('cstartdate', text="Start date")
- self.win_coursepage_coursetreeview.heading('cenddate', text="End date")
- self.win_coursepage_coursetreeview.heading("cvenue", text='Venue')
- self.win_coursepage_coursetreeview.heading('cnumberofcouples', text="No. of Couples")
- self.win_coursepage_coursetreeview.bind("<<TreeviewSelect>>",lambda e:self.coursesshowdetails())
- self.win_coursepage_savecoursebutton = xwidget("ttk::button",self.win_coursepage,0.03,0.48,takefocus="",text="Save",command=lambda:self.editupdate(self.coursefieldlist,"Courses",self.reloadcourses,self.win_coursepage_coursenotesframe_notestextbox))
- self.win_coursepage_addcoursebutton = xwidget("ttk::button",self.win_coursepage,0.095,0.48,takefocus="",text="Add course",command=lambda:self.addupdate([self.getidno(0,self.getcourses())],self.getcourses(),self.coursefieldlist,"Courses",self.reloadcourses))
- self.win_coursepage_removecoursebutton = xwidget("ttk::button",self.win_coursepage,0.16,0.48,takefocus="",text="Remove course",command=lambda:self.removeupdate(self.coursefieldlist,"Courses","CoursesID",self.reloadcourses,self.win_coursepage_coursenotesframe_notestextbox))
- self.win_coursepage_editclassframe = xwidget("ttk::labelframe",self.win_coursepage,0.48,0.02,0.96,0.5,text="Edit Classes",width="605",height="555",takefocus="0")
- self.win_coursepage_editclassframe_classtreeview = ScrolledTreeView (self.win_coursepage_editclassframe, columns=('Classno','Classname','Classdate','Classtimestart',"Classtimeend"),show="headings")
- self.win_coursepage_editclassframe_classtreeview.place(relx=0.02,rely=0.02,relheight=0.5,relwidth=0.96)
- self.win_coursepage_editclassframe_classtreeview.configure(takefocus="0")
- self.win_coursepage_editclassframe_classtreeview.configure(height="4")
- self.win_coursepage_editclassframe_classtreeview.configure(takefocus="0")
- self.win_coursepage_editclassframe_classtreeview.column(0, width=65, anchor='center')
- self.win_coursepage_editclassframe_classtreeview.column(1, width=90, anchor='center')
- self.win_coursepage_editclassframe_classtreeview.column(2, width=90, anchor='center')
- self.win_coursepage_editclassframe_classtreeview.column(3, width=90, anchor='center')
- self.win_coursepage_editclassframe_classtreeview.column(4, width=90, anchor='center')
- self.win_coursepage_editclassframe_classtreeview.heading('Classno', text='Class No')
- self.win_coursepage_editclassframe_classtreeview.heading('Classname', text='Class Name')
- self.win_coursepage_editclassframe_classtreeview.heading('Classdate', text="Class date")
- self.win_coursepage_editclassframe_classtreeview.heading('Classtimestart', text="Start time")
- self.win_coursepage_editclassframe_classtreeview.heading("Classtimeend", text='End time')
- self.win_coursepage_editclassframe_classtreeview.bind("<<TreeviewSelect>>",lambda e:self.Classshowdetails())
- self.win_coursepage_editclassframe_Classnotesframe = xwidget("ttk::labelframe",self.win_coursepage_editclassframe,0.005,0.7,0.3,0.99,text="Class notes",width="605",height="555",takefocus="0")
- self.win_coursepage_editclassframe_Classnotesframe_notestextbox = ScrolledText (self.win_coursepage_editclassframe_Classnotesframe)
- self.win_coursepage_editclassframe_Classnotesframe_notestextbox.place(relx=0.01,rely=0.05,relheight=0.9,relwidth=0.98)
- self.win_coursepage_editclassframe_Classnotesframe_notestextbox.configure(background="white",height="3",width="10")
- self.win_coursepage_editclassframe_classdatelabel = xwidget("ttk::label",self.win_coursepage_editclassframe,0.05,0.64,relief="flat",text="Class date / /")
- self.win_coursepage_editclassframe_classdatedaycombobox = xwidget("ttk::combobox",self.win_coursepage_editclassframe,0.19,0.64,0.04,0.07,values=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31),takefocus="",textvariable=self.Classdateday[0])
- self.win_coursepage_editclassframe_classdatemonthcombobox = xwidget("ttk::combobox",self.win_coursepage_editclassframe,0.29,0.64,0.04,0.07,values=(1,2,3,4,5,6,7,8,9,10,11,12),takefocus="",textvariable=self.Classdatemonth[0])
- self.win_coursepage_editclassframe_classdateyearcombobox = xwidget("ttk::combobox",self.win_coursepage_editclassframe,0.39,0.64,0.04,0.09,values=(2011,2012,2013,2014),takefocus="",textvariable=self.Classdateyear[0])
- self.win_coursepage_startdatelabel = xwidget("ttk::label",self.win_coursepage,0.02,0.62,relief="flat",text="Start date / /")
- self.win_coursepage_startdatedaycombobox = xwidget("ttk::combobox",self.win_coursepage,0.07,0.62,0.04,0.035,values=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31),takefocus="",textvariable=self.startdateday[0])
- self.win_coursepage_startdatemonthcombobox = xwidget("ttk::combobox",self.win_coursepage,0.12,0.62,0.04,0.035,values=(1,2,3,4,5,6,7,8,9,10,11,12),takefocus="",textvariable=self.startdatemonth[0])
- self.win_coursepage_startdateyearcombobox = xwidget("ttk::combobox",self.win_coursepage,0.17,0.62,0.04,0.055,values=(2011,2012,2013,2014),takefocus="",textvariable=self.startdateyear[0])
- self.win_coursepage_enddatelabel = xwidget("ttk::label",self.win_coursepage,0.02,0.68,relief="flat",text="End date / /")
- self.win_coursepage_enddatedaycombobox = xwidget("ttk::combobox",self.win_coursepage,0.07,0.68,0.04,0.035,values=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31),takefocus="",textvariable=self.enddateday[0])
- self.win_coursepage_enddatemonthcombobox = xwidget("ttk::combobox",self.win_coursepage,0.12,0.68,0.04,0.035,values=(1,2,3,4,5,6,7,8,9,10,11,12),takefocus="",textvariable=self.enddatemonth[0])
- self.win_coursepage_enddateyearcombobox = xwidget("ttk::combobox",self.win_coursepage,0.17,0.68,0.04,0.055,values=(2011,2012,2013,2014),takefocus="",textvariable=self.enddateyear[0])
- self.win_coursepage_coursenotesframe = xwidget("ttk::labelframe",self.win_coursepage,0.005,0.73,0.23,0.47,text="Course notes",width="605",height="555",takefocus="0")
- self.win_coursepage_coursenotesframe_notestextbox = ScrolledText (self.win_coursepage_coursenotesframe)
- self.win_coursepage_coursenotesframe_notestextbox.place(relx=0.01,rely=0.05,relheight=0.9,relwidth=0.98)
- self.win_coursepage_coursenotesframe_notestextbox.configure(background="white",height="3",width="10")
- self.win_coursepage_editclassframe_starttimelabel = xwidget("ttk::label",self.win_coursepage_editclassframe,0.54,0.54,relief="flat",text="Start time")
- self.win_coursepage_editclassframe_endtimelabel = xwidget("ttk::label",self.win_coursepage_editclassframe,0.54,0.64,relief="flat",text="End time")
- self.win_coursepage_editclassframe_starttimecombobox = xwidget("ttk::combobox",self.win_coursepage_editclassframe,0.65,0.54,0.04,0.155,values=('00:00','00:15','00:30','00:45','01:00','01:15','01:30','01:45','02:00','02:15','02:30','02:45','03:00','03:15','03:30','03:45','04:00','04:15','04:30','04:45','05:00','05:15','05:30','05:45','06:00','06:15','06:30','06:45','07:00','07:15','07:30','07:45','08:00','08:15','08:30','08:45','09:00','09:15','09:30','09:45','10:00','10:15','10:30','10:45','11:00','11:15','11:30','11:45','12:00','12:15','12:30','12:45','13:00','13:15','13:30','13:45','14:00','14:15','14:30','14:45','15:00','15:15','15:30','15:45','16:00','16:15','16:30','16:45','17:00','17:15','17:30','17:45','18:00','18:15','18:30','18:45','19:00','19:15','19:30','19:45','20:00','20:15','20:30','20:45','21:00','21:15','21:30','21:45','22:00','22:15','22:30','22:45','23:00','23:15','23:30','23:45'),takefocus="",textvariable=self.Classstarttime[0])
- self.win_coursepage_editclassframe_endtimecombobox = xwidget("ttk::combobox",self.win_coursepage_editclassframe,0.65,0.64,0.04,0.155,values=('00:00','00:15','00:30','00:45','01:00','01:15','01:30','01:45','02:00','02:15','02:30','02:45','03:00','03:15','03:30','03:45','04:00','04:15','04:30','04:45','05:00','05:15','05:30','05:45','06:00','06:15','06:30','06:45','07:00','07:15','07:30','07:45','08:00','08:15','08:30','08:45','09:00','09:15','09:30','09:45','10:00','10:15','10:30','10:45','11:00','11:15','11:30','11:45','12:00','12:15','12:30','12:45','13:00','13:15','13:30','13:45','14:00','14:15','14:30','14:45','15:00','15:15','15:30','15:45','16:00','16:15','16:30','16:45','17:00','17:15','17:30','17:45','18:00','18:15','18:30','18:45','19:00','19:15','19:30','19:45','20:00','20:15','20:30','20:45','21:00','21:15','21:30','21:45','22:00','22:15','22:30','22:45','23:00','23:15','23:30','23:45'),takefocus="",textvariable=self.Classendtime[0])
- self.win_coursepage_editclassframe_saveclassbutton = xwidget("ttk::button",self.win_coursepage_editclassframe,0.04,0.53,takefocus="",text="Save",command=lambda:self.editupdate(self.Classfieldlist,"Classes",self.reloadclasses,self.win_coursepage_editclassframe_Classnotesframe_notestextbox))
- self.win_coursepage_editclassframe_addclassbutton = xwidget("ttk::button",self.win_coursepage_editclassframe,0.171,0.53,takefocus="",text="Add Class",command=lambda:self.addupdate([self.getidno(0,self.getClasses()),self.courseID[0].get(),self.getidno(2,self.Classesresults)],self.Classfieldlist,"Classes",self.reloadclasses))
- self.win_coursepage_editclassframe_deleteclassbutton = xwidget("ttk::button",self.win_coursepage_editclassframe,0.3,0.53,takefocus="",text="Remove Class",command=lambda:self.removeupdate(self.Classfieldlist,"Classes","ClassID",self.reloadclasses,self.win_coursepage_editclassframe_Classnotesframe_notestextbox))
- self.win_coursepage_editclassframe_classnamelabel = xwidget("ttk::label",self.win_coursepage_editclassframe,0.05,0.59,relief="flat",text="Class name")
- self.win_coursepage_editclassframe_classnameentry = xwidget("ttk::entry",self.win_coursepage_editclassframe,0.19,0.59,0.04,0.3,takefocus="",textvariable=self.Classname[0],cursor="ibeam")
- self.win_coursepage_coursetypelabel = xwidget("ttk::label",self.win_coursepage,0.02,0.56,relief="flat",text="Course type")
- self.win_coursepage_tNo35_pg0_cpd77_tEn63 = xwidget("ttk::entry",self.win_coursepage,0.08,0.56,0.04,0.14,takefocus="",textvariable=self.coursetype[0],cursor="ibeam")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77 = xwidget("ttk::labelframe",self.win_coursepage,0.25,0.47,0.25,0.22,text="Venue address",width="295",height="165")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tLa69 = xwidget("ttk::label",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.05,0.04,relief="flat",text="Line 1")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tEn63 = xwidget("ttk::entry",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.25,0.04,0.13,0.74,takefocus="",textvariable=self.venuel1[0],cursor="ibeam")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tLa70 = xwidget("ttk::label",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.05,0.23,relief="flat",text="Line 2")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tEn72 = xwidget("ttk::entry",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.25,0.23,0.13,0.74,takefocus="",textvariable=self.venuel2[0],cursor="ibeam")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tLa65 = xwidget("ttk::label",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.05,0.42,relief="flat",text="Town")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tEn73 = xwidget("ttk::entry",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.25,0.42,0.13,0.74,takefocus="",textvariable=self.venuet[0],cursor="ibeam")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tLa66 = xwidget("ttk::label",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.05,0.61,relief="flat",text="County")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tEn74 = xwidget("ttk::entry",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.25,0.61,0.13,0.74,takefocus="",textvariable=self.venuec[0],cursor="ibeam")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tLa67 = xwidget("ttk::label",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.05,0.8,relief="flat",text="Postcode")
- self.win_coursepage_editclassframe_tNo35_pg0_cpd77_tEn75 = xwidget("ttk::entry",self.win_coursepage_editclassframe_tNo35_pg0_cpd77,0.25,0.8,0.13,0.74,takefocus="",textvariable=self.venuep[0],cursor="ibeam")
- def couplesshowdetails(self):
- '''will retrieve the data for the selected record chosen by the treeview'''
- recno =len(self.couplesdb)- self.win_couplepage_coupletreeview.index(self.win_couplepage_coupletreeview.focus()) -1
- self.coupleID[0].set(self.couplesdb[recno][0])
- self.Wfirstname[0].set(self.couplesdb[recno][1])
- self.Wsurname[0].set(self.couplesdb[recno][2])
- self.Wmobilenumber[0].set(self.couplesdb[recno][3])
- self.Wemailaddress[0].set(self.couplesdb[recno][4])
- self.Pfirstname[0].set(self.couplesdb[recno][5])
- self.Psurname[0].set(self.couplesdb[recno][6])
- self.Pmobilenumber[0].set(self.couplesdb[recno][7])
- self.Pemailaddress[0].set(self.couplesdb[recno][8])
- self.address_line1[0].set(self.couplesdb[recno][9])
- self.address_line2[0].set(self.couplesdb[recno][10])
- self.address_town[0].set(self.couplesdb[recno][11])
- self.address_county[0].set(self.couplesdb[recno][12])
- self.address_postcode[0].set(self.couplesdb[recno][13])
- self.notescouple[0].set(self.couplesdb[recno][14])
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.delete('1.0', 'end')
- self.win_couplepage_editcoupleframe_notesframe_notestextbox.insert('1.0',self.notescouple[0].get())
- self.reloadenrollments()
- def coursesshowdetails(self):
- '''will retrieve the data for the selected record chosen by the treeview'''
- recno =len(self.coursesdb)- self.win_coursepage_coursetreeview.index(self.win_coursepage_coursetreeview.focus()) -1
- self.courseID[0].set(self.coursesdb[recno][0])
- self.coursetype[0].set(self.coursesdb[recno][1])
- self.startdateday[0].set(self.coursesdb[recno][2])
- self.enddateday[0].set(self.coursesdb[recno][3])
- self.startdatemonth[0].set(self.coursesdb[recno][4])
- self.enddatemonth[0].set(self.coursesdb[recno][5])
- self.startdateyear[0].set(self.coursesdb[recno][6])
- self.enddateyear[0].set(self.coursesdb[recno][7])
- self.venuel1[0].set(self.coursesdb[recno][8])
- self.venuel2[0].set(self.coursesdb[recno][9])
- self.venuet[0].set(self.coursesdb[recno][10])
- self.venuec[0].set(self.coursesdb[recno][11])
- self.venuep[0].set(self.coursesdb[recno][12])
- self.notescourse[0].set(self.coursesdb[recno][13])
- self.win_coursepage_coursenotesframe_notestextbox.delete('1.0', 'end')
- self.win_coursepage_coursenotesframe_notestextbox.insert('1.0',self.notescourse[0].get())
- self.reloadclasses()
- def Classshowdetails(self):
- '''will retrieve the data for the selected record chosen by the treeview'''
- recno =len(self.Classesresults)- self.win_coursepage_editclassframe_classtreeview.index(self.win_coursepage_editclassframe_classtreeview.focus()) -1
- self.ClassuniqueID[0].set(self.Classesresults[recno][0])
- self.Classid[0].set(self.Classesresults[recno][2])
- self.Classname[0].set(self.Classesresults[recno][3])
- self.Classdateday[0].set(self.Classesresults[recno][4])
- self.Classdatemonth[0].set(self.Classesresults[recno][5])
- self.Classdateyear[0].set(self.Classesresults[recno][6])
- self.Classstarttime[0].set(self.Classesresults[recno][7])
- self.Classendtime[0].set(self.Classesresults[recno][8])
- self.Classnotes[0].set(self.Classesresults[recno][9])
- self.win_coursepage_editclassframe_Classnotesframe_notestextbox.delete('1.0', 'end')
- self.win_coursepage_editclassframe_Classnotesframe_notestextbox.insert('1.0',self.Classnotes[0].get())
- def reloadtreeviews(self):
- '''will reload the couples treeview and the courses treeview'''
- populatetreeview(self.win_couplepage_coupletreeview,self.getcouples())
- populatetreeview(self.win_coursepage_coursetreeview,self.getcoursetreeviewdata(self.getcourses(),0,-1))
- def reloadcouples(self):
- '''will reload the couples treeview and the courses treeview'''
- populatetreeview(self.win_couplepage_coupletreeview,self.getcouples())
- def reloadcourses(self):
- '''will reload the courses treeview'''
- populatetreeview(self.win_coursepage_coursetreeview,self.getcoursetreeviewdata(self.getcourses(),0,-1))
- def reloadclasses(self):
- '''will reload the classes treeview'''
- populatetreeview(self.win_coursepage_editclassframe_classtreeview,self.getClasstreeviewdata(self.searchClasses(self.courseID)))
- def reloadenrollments(self):
- populatetreeview(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_avaiablecoursestreeview,self.getcoursetreeviewdata(self.getavaiblecourses(self.coupleID[0].get()),0,4))
- populatetreeview(self.win_couplepage_editcoupleframe_detailsandrenollmentnotebook_enrollmenttab_enrolledcoursestreeview,self.getcoursetreeviewdata(self.getenrolledcourses(self.coupleID[0].get()),0,4))
- def getcoursetreeviewdata(self,data1,no1,no2):
- '''will retreive the data for courses to populate the treeviews and then will arange it with the option to change what data you want'''
- data2 = []
- for i in range(len(data1)):
- data2.append((data1[i][0],data1[i][1],self.concatonatedate(data1[i][2],data1[i][4],data1[i][6]),self.concatonatedate(data1[i][3],data1[i][5],data1[i][7]),data1[i][12],0)[no1:no2])
- return data2
- def getClasstreeviewdata(self,data1):
- '''will retreive the data for classes to populate the treeviews and then will arange it'''
- data2 = []
- for data in data1:
- data2.append((data[2],data[3],self.concatonatedate(data[4],data[5],data[6]),data[7],data[8]))
- return data2
- def editupdate(self,fieldlist,table,func,notes):
- '''will save the changes to the current record in the given table and then call the function called func, when i have called this function it has been to update the treeview according to the function passed'''
- self.updatetext(notes,fieldlist[-1])
- if self.validates(fieldlist):
- self.editrecord(fieldlist,table)
- func()
- def removeupdate(self,fieldlist,table,primarykey,func,notes):
- '''will remove the current record in the given table and then call the function called func, when i have called this function it has been to update the treeview according to the function passed'''
- self.updatetext(notes,fieldlist[-1])
- self.deleterecord(fieldlist,table,primarykey)
- func()
- def addupdate(self,idno,fieldlist,table,func):
- '''will add a new record in the given table and then call the function called func, when i have called this function the func has been to update the treeview according to the function passed'''
- self.newrecord(idno,fieldlist,table)
- func()
- def enrollupdate(self,CouplesID,CoursesID):
- '''will add a new enrolment record to the enrollments table and then update the treeviews'''
- self.enroll(CouplesID,CoursesID)
- self.reloadenrollments()
- def unenrollupdate(self,CouplesID,CoursesID):
- '''will remove the selected enrolment record to the enrollments table and then update the treeviews'''
- self.unenroll(CouplesID,CoursesID)
- self.reloadenrollments()
- def getcouples(self):
- '''will fetch and then return all the couples from the couples database and order them by the CouplesID in descending order'''
- self.curs.execute('select * from Couples ORDER BY CouplesID DESC')
- self.couplesdb = self.curs.fetchall()
- return self.couplesdb
- def getcourses(self):
- '''will fetch and then return all the Courses from the courses database and order them by the coursesID in ascending order'''
- self.curs.execute('select * from Courses ORDER BY CoursesID ASC')
- self.coursesdb = self.curs.fetchall()
- return self.coursesdb
- def getClasses(self):
- '''will fetch and then return all the Classes from the Classes database and order them by the Classes ID in descending order'''
- self.curs.execute('select * from Classes ORDER BY ClassID DESC')
- self.Classesdb = self.curs.fetchall()
- return self.Classesdb
- def searchClasses(self,courseid):
- '''will fetch and then return all the Classes with the matching CoursesID from the Classes database and order them by the Classes ID in descending order'''
- self.curs.execute('select * from Classes where CoursesID=? ORDER BY ClassesID DESC',[courseid[0].get()])
- self.Classesresults = self.curs.fetchall()
- return self.Classesresults
- def getidno(self,no,array):
- '''will return the smallest free id number at the position given by no in an array'''
- i = []
- for arr in array:
- i.append(arr[no])
- x = 1
- while isin(x,i):
- x += 1
- return x
- def newrecord(self,existingdata,fieldlist,table):
- '''will creata a new record using the dataprovided in the given table and will fill in the remaining fields with blanks'''
- valuesstr = ' values(?'
- blankdata = existingdata
- while (len(blankdata) < len(fieldlist)):
- blankdata.append("")
- j = 2
- for j in range(len(fieldlist)-1):
- valuesstr+=',?'
- valuesstr+=')'
- try:
- self.curs.execute('insert into '+table+valuesstr,blankdata)
- self.conn.commit()
- except:
- pass
- def editrecord(self,fieldlist,table):
- '''will edit the matching record in the given table'''
- query = "REPLACE INTO "+table+" values(?"
- for i in range(len(fieldlist)-1):
- query+=',?'
- query+= ")"
- editvalues = getStrVarValues(fieldlist)
- try:
- self.curs.execute(query,editvalues)
- self.conn.commit()
- except:
- pass
- def deleterecord(self,fieldlist,table,primarykey):
- '''will delete the matching record in the given database'''
- query = "DELETE FROM "+table+" where "+primarykey+" =?"
- values = getStrVarValues(fieldlist)
- idvalue = values[0]
- try:
- self.curs.execute(query,[idvalue])
- self.conn.commit()
- except:
- pass
- def searchforcouple(self,fieldno,searchvalue):
- '''will search the couples table for the matching record for the given field'''
- fieldlist =[0,("Wsurname","Msurname"),("Homenumber","Homenumber"),("Apostcode","Apostcode"),("Wfirstname","Mfirstname"),("Wmobilenumber","Mmobilenumber"),("Wemailaddress","Memailaddress")]
- self.curs.execute('select * from Couples where '+fieldlist[fieldno][0]+'=? OR '+fieldlist[fieldno][1]+'=?',[searchvalue,searchvalue])
- queryResult = self.curs.fetchall()
- return queryResult
- def getenrolledcourses(self,coupleID):
- '''will return the courses that the given couple has been enrolled on'''
- self.curs.execute('select * from Enrollment where CouplesID =?',[coupleID])
- enrolments = self.curs.fetchall()
- self.Ecourses = []
- for i in range(len(enrolments)):
- self.curs.execute('select * from Courses where CoursesID =?',[enrolments[i][1]])
- courses = self.curs.fetchall()
- for j in range(len(courses)):
- self.Ecourses.append(courses[j])
- return self.Ecourses
- def getavaiblecourses(self,coupleID):
- '''will return the courses that the given couple has not been enrolled on'''
- allcourses = self.getcourses()
- enrolledcourses = self.getenrolledcourses(coupleID)
- self.Acourses = []
- for course in allcourses:
- if isin(course,enrolledcourses):
- pass
- else:
- self.Acourses.append(course)
- return self.Acourses
- def enroll(self,CouplesID,CoursesID):
- '''will create a new enrollment record with the given CouplesID and CoursesID'''
- self.curs.execute('insert into Enrollment values(?,?)',[CouplesID[0].get(),CoursesID])
- self.conn.commit()
- def unenroll(self,CouplesID,CoursesID):
- '''will delete a matching enrollment record with the given CouplesID and CoursesID'''
- self.curs.execute('DELETE FROM Enrollment WHERE CouplesID = ? AND CoursesID = ?',[CouplesID[0].get(),CoursesID])
- self.conn.commit()
- def updatetext(self,textbox,var):
- '''will update a given Strvar with the contents of a textbox'''
- var[0].set(textbox.get("1.0","end"))
- def concatonatedate(self,day,month,year):
- '''will concatonate the given strings and return them'''
- date = str(day)+"/"+str(month)+"/"+str(year)
- return date
- def errormessage(self,info):
- messagebox.showinfo(message=info,icon="warning")
- def validates(self,values):
- i = -1
- correct = True
- while correct and i < len(values)-1:
- i +=1
- correct = self.Validate(values[i])
- if not correct:
- self.errormessage("please enter"+values[i][1][1])
- return False
- else:
- return True
- def Validate(self,value):
- if value[1] == "":
- return True
- else:
- if value[1][0].match(value[0].get()):
- return True
- else:
- value[0].set("")
- return False
- def logout(self):
- global w
- root.destroy()
- w = None
- vp_start_guilogin()
- def set_Tk_var(self):
- '''will set up the self variables for the main window and specify what if any validation is required'''
- #----------------------------Validation
- Vphonenumber = [re.compile('(\+\d\d|\d)\d\d\d\d ?\d\d\d ?\d\d\d$')," a valid phone number."]
- Vpostcode = [re.compile('[a-zA-Z][a-zA-Z]?\d\d? ?\d[a-zA-Z][a-zA-Z]$')," a valid postcode"]
- Vstring = [re.compile('[a-zA-Z]+$')," letters only."]
- Vemail = [re.compile('[a-zA-Z0-9_\.]+@[a-zA-Z0-9_.]+\.[a-zA-Z]+')," a valid email address."]
- Vdateday = [re.compile('([1-9]$|[1-2][1-9]$|31$)')," a day between 1 and 31"]
- Vdatemonth = [re.compile('([1-9]$|1[1-2]$)')," a month between 1 and 12"]
- Vdateyear = [re.compile('(20([0-4][0-9]|50))')," a year between 2000 and 2050"]
- Vtime = [re.compile('\d\d\:\d\d')," a time in the format xx:xx"]
- self.searchV = StringVar()
- self.searchF = StringVar()
- self.searchV2 = StringVar()
- self.searchF2 = StringVar()
- self.coupleID = [StringVar(),""]
- #------------------------------ address
- self.address_line1 = [StringVar(),""]
- self.address_line2 = [StringVar(),""]
- self.address_town = [StringVar(),""]
- self.address_county = [StringVar(),""]
- self.address_postcode = [StringVar(),Vpostcode]
- #----------------------------- woman details
- self.Wemailaddress = [StringVar(),Vemail]
- self.Wmobilenumber = [StringVar(),Vphonenumber]
- self.Wsurname = [StringVar(),Vstring]
- self.Wfirstname = [StringVar(),Vstring]
- #----------------------------- partner details
- self.Pemailaddress = [StringVar(),Vemail]
- self.Pmobilenumber = [StringVar(),Vphonenumber]
- self.Psurname = [StringVar(),Vstring]
- self.Pfirstname = [StringVar(),Vstring]
- self.notescouple = [StringVar(),""]
- self.fieldlist = [self.coupleID,self.Wfirstname,self.Wsurname,self.Wmobilenumber,self.Wemailaddress,self.Pfirstname,self.Psurname,self.Pmobilenumber,self.Pemailaddress,self.address_line1,self.address_line2,self.address_town,self.address_county,self.address_postcode,self.notescouple]
- #---------------------------- course details
- self.courseID = [StringVar(),""]
- self.coursetype = [StringVar(),""]
- self.startdateday = [StringVar(),Vdateday]
- self.enddateday = [StringVar(),Vdateday]
- self.startdatemonth = [StringVar(),Vdatemonth]
- self.startdateyear = [StringVar(),Vdateyear]
- self.enddatemonth = [StringVar(),Vdatemonth]
- self.enddateyear = [StringVar(),Vdateyear]
- self.venuel1 = [StringVar(),""]
- self.venuel2 = [StringVar(),""]
- self.venuet = [StringVar(),""]
- self.venuec = [StringVar(),""]
- self.venuep = [StringVar(),Vpostcode]
- self.notescourse = [StringVar(),""]
- self.coursefieldlist = [self.courseID,self.coursetype,self.startdateday,self.enddateday,self.startdatemonth,self.enddatemonth,self.startdateyear,self.enddateyear,self.venuel1,self.venuel2,self.venuet,self.venuec,self.venuep,self.notescourse]
- #---------------------------- Class details
- self.ClassuniqueID = [StringVar(),""]
- self.Classid = [StringVar(),""]
- self.Classname = [StringVar(),""]
- self.Classdateday = [StringVar(),Vdateday]
- self.Classdatemonth = [StringVar(),Vdatemonth]
- self.Classdateyear = [StringVar(),Vdateyear]
- self.Classstarttime = [StringVar(),Vtime]
- self.Classendtime = [StringVar(),Vtime]
- self.Classnotes = [StringVar(),""]
- self.Classesresults = []
- self.Classfieldlist = [self.ClassuniqueID,self.courseID,self.Classid,self.Classname,self.Classdateday,self.Classdatemonth,self.Classdateyear,self.Classstarttime,self.Classendtime,self.Classnotes]
- #--------------------------- Enrolment
- self.EcourseID = [StringVar(),""]
- self.EcoupleID = [StringVar(),""]
- self.Acourses= []
- self.ECourses= []
- class Login: #login screen
- '''class for the login/newuser window'''
- def __init__(self, master=None):
- style = ttk.Style()
- theme = style.theme_use()
- default = style.lookup(theme, 'background')
- master.configure(background=default)
- master.resizable(FALSE,FALSE)
- self.topmenu = Menu(master,font=('MS Sans Serif',10,'normal','roman',))
- master.configure(menu = self.topmenu)
- self.username = StringVar()
- self.password = StringVar()
- self.usernameentry = xwidget('ttk::entry',master,0.31,0.07,0.14,0.5,takefocus="",cursor="ibeam",textvariable=self.username)
- self.passwordentry = xwidget('ttk::entry',master,0.31,0.26,0.14,0.5,takefocus="",cursor="ibeam",show="*",textvariable=self.password)
- self.usernamelabel = xwidget('ttk::label',master,0.08,0.07,relief="flat",text="Username")
- self.passwordlabel = xwidget('ttk::label',master,0.08,0.26,relief="flat",text="Password")
- self.loginbutton = xwidget('ttk::button',master,0.39,0.46,takefocus="",text="Login",command=lambda:self.login())
- self.tBu40 = xwidget('ttk::button',master,0.04,0.79,takefocus="",text="Create new user",command=lambda:self.newlogin(self.username.get(),self.password.get()))
- master.bind('<Return>',lambda e: self.login())
- def newlogin(self,username,password):
- database = ["CREATE TABLE [Classes] ([ClassID] INTEGER PRIMARY KEY AUTOINCREMENT,[CoursesID] INTEGER ,[ClassesID] INTEGER,[Classname] VARCHAR, [Classdateday] DATE, [Classdatemonth] DATE, [Classdateyear] DATE, [starttime] DATETIME, [endtime] DATETIME, [notes] VARCHAR);",
- "CREATE TABLE [Couples] ([CouplesID] INTEGER PRIMARY KEY AUTOINCREMENT, [Wfirstname] TEXT, [Wsurname] TEXT, [Wmobilenumber] INTEGER, [Wemailaddress] VARCHAR, [Mfirstname] TEXT, [Msurname] TEXT, [Mmobilenumber] INTEGER, [Memailaddress] VARCHAR, [Aline1] VARCHAR, [Aline2] VARCHAR, [Atown] TEXT, [Acounty] TEXT, [Apostcode] VARCHAR, [notes] VARCHAR);",
- "CREATE TABLE [Courses] ([CoursesID] INTEGER PRIMARY KEY AUTOINCREMENT,[coursetype] VARCHAR, [startdateday] DATE, [enddateday] DATE, [startdatemonth] DATE, [enddatemonth] DATE, [startdateyear] DATE, [enddateyear] DATE, [venuel1] TEXT, [venuel2] TEXT, [venuet] TEXT, [venuelc] TEXT, [venuep] TEXT, [notes] VARCHAR);",
- "CREATE TABLE [Enrollment] ([CouplesID] INTEGER, [CoursesID] INTEGER, PRIMARY KEY ([CouplesID] COLLATE 'NOCASE', [CoursesID] COLLATE 'NOCASE'));",
- "CREATE TABLE [settings] ([username] TEXT PRIMARY KEY, [pw] TEXT);"]
- db = sqlite3.connect(username+"database.db")
- cursor = db.cursor()
- try:
- for base in database:
- cursor.execute(base)
- cursor.execute('insert into settings values(?,?)',(username,password))
- except:
- db.commit()
- def login(self):
- try:
- databasename =self.username.get()+"database.db"
- conn = sqlite3.connect(databasename) #conn is created and connected to the database
- curs = conn.cursor()
- curs.execute('select * from settings')
- settings = curs.fetchall()
- if (self.username.get() == settings[0][0] and self.password.get() == settings [0][1]):
- global w
- root.destroy()
- w = None
- vp_start_gui(databasename)
- else: messagebox.showinfo(message='Incorrect password.',icon="warning")
- except:
- messagebox.showinfo(message='Incorrect username.',icon="warning")
- class AutoScroll(object):
- def __init__(self, master):
- vsb = ttk.Scrollbar(master, orient='vertical', command=self.yview)
- hsb = ttk.Scrollbar(master, orient='horizontal', command=self.xview)
- self.configure(yscrollcommand=self._autoscroll(vsb),
- xscrollcommand=self._autoscroll(hsb))
- self.grid(column=0, row=0, sticky='nsew')
- vsb.grid(column=1, row=0, sticky='ns')
- hsb.grid(column=0, row=1, sticky='ew')
- master.grid_columnconfigure(0, weight=1)
- master.grid_rowconfigure(0, weight=1)
- methods = Pack.__dict__.keys() + Grid.__dict__.keys() \
- + Place.__dict__.keys()
- for meth in methods:
- if meth[0] != '_' and meth not in ('config', 'configure'):
- setattr(self, meth, getattr(master, meth))
- @staticmethod
- def _autoscroll(sbar):
- '''Hide and show scrollbar as needed.'''
- def wrapped(first, last):
- first, last = float(first), float(last)
- if first <= 0 and last >= 1:
- sbar.grid_remove()
- else:
- sbar.grid()
- sbar.set(first, last)
- return wrapped
- def __str__(self):
- return str(self.master)
- def _create_container(func):
- '''Creates a ttk Frame with a given master, and use this new frame to
- place the scrollbars and the widget.'''
- def wrapped(cls, master, **kw):
- container = ttk.Frame(master)
- return func(cls, container, **kw)
- return wrapped
- class ScrolledText(AutoScroll, Text):
- '''A standard Tkinter Text widget with scrollbars that will
- automatically show/hide as needed.'''
- @_create_container
- def __init__(self, master, **kw):
- Text.__init__(self, master, **kw)
- AutoScroll.__init__(self, master)
- class ScrolledTreeView(AutoScroll, ttk.Treeview,):
- '''A standard ttk Treeview widget with scrollbars that will
- automatically show/hide as needed.'''
- @_create_container
- def __init__(self, master, **kw):
- ttk.Treeview.__init__(self, master, **kw)
- AutoScroll.__init__(self, master)
- vp_start_guilogin()ssage='Incorrect password.',icon="warning")
- except:
- messagebox.showinfo(message='Incorrect username.',icon="warning")
- class AutoScroll(object):
- def __init__(self, master):
- vsb = ttk.Scrollbar(master, orient='vertical', command=self.yview)
- hsb = ttk.Scrollbar(master, orient='horizontal', command=self.xview)
- self.configure(yscrollcommand=self._autoscroll(vsb),
- xscrollcommand=self._autoscroll(hsb))
- self.grid(column=0, row=0, sticky='nsew')
- vsb.grid(column=1, row=0, sticky='ns')
- hsb.grid(column=0, row=1, sticky='ew')
- master.grid_columnconfigure(0, weight=1)
- master.grid_rowconfigure(0, weight=1)
- methods = Pack.__dict__.keys() + Grid.__dict__.keys() \
- + Place.__dict__.keys()
- for meth in methods:
- if meth[0] != '_' and meth not in ('config', 'configure'):
- setattr(self, meth, getattr(master, meth))
- @staticmethod
- def _autoscroll(sbar):
- '''Hide and show scrollbar as needed.'''
- def wrapped(first, last):
- first, last = float(first), float(last)
- if first <= 0 and last >= 1:
- sbar.grid_remove()
- else:
- sbar.grid()
- sbar.set(first, last)
- return wrapped
- def __str__(self):
- return str(self.master)
- def _create_container(func):
- '''Creates a ttk Frame with a given master, and use this new frame to
- place the scrollbars and the widget.'''
- def wrapped(cls, master, **kw):
- container = ttk.Frame(master)
- return func(cls, container, **kw)
- return wrapped
- class ScrolledText(AutoScroll, Text):
- '''A standard Tkinter Text widget with scrollbars that will
- automatically show/hide as needed.'''
- @_create_container
- def __init__(self, master, **kw):
- Text.__init__(self, master, **kw)
- AutoScroll.__init__(self, master)
- class ScrolledTreeView(AutoScroll, ttk.Treeview,):
- '''A standard ttk Treeview widget with scrollbars that will
- automatically show/hide as needed.'''
- @_create_container
- def __init__(self, master, **kw):
- ttk.Treeview.__init__(self, master, **kw)
- AutoScroll.__init__(self, master)
- vp_start_guilogin()eview.__init__(self, master, **kw)
- AutoScroll.__init__(self, master)
- vp_start_guilogin()
Add Comment
Please, Sign In to add comment