def error(t): #Δημιουργία παραθύρου Σφάλματος err_window=scrollbar.create('350x150','Σφάλμα') i=Image.open("error1.JPG") img_err=ImageTk.PhotoImage(i) Label(err_window,bg='white',image=img_err).pack(side=LEFT) Label(err_window,bg='white', text=t, fg="red", font=('arial','14')).pack(side=LEFT) err_window.mainloop() return
def success(t,option=0): #Δημιουργία παραθύρου επιτυχίας succ_window=scrollbar.create('380x250','Επιτυχία') i=Image.open("succ1.JPG") img=ImageTk.PhotoImage(i) Label(succ_window,bg='white',image=img).pack() Label(succ_window,bg='white', text=t, font=('arial','14')).pack() if(option==1): Label(succ_window,bg='white', text="Προσοχή!\nΔεν υπάρχει αρκετό απόθεμα", font=('arial','14'),fg='red').pack() succ_window.mainloop() return
def choice(a,conn): #δημιουργία παραθύρου για επιλογή if(a==1): #για την περίπτωση "Στοιχεία συμβολαίων ανά κατηγορία καλλιτεχνών" window=scrollbar.create('350x250','Επιλογή Ιδιότητας') ep=['*** Όλες ***','Στιχουργοί','Συνθέτες','Μουσικοί'] label='Επιλέξτε ιδιότητα' b=Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: contracts(conn,window,combo.get())) else: #για την περίπτωση "Συγκροτήματα/Τραγουδιστές" window=scrollbar.create('350x250','Επιλογή Κατηγορίας') ep=['Συγκροτήματα','Τραγουδιστές'] label='Επιλέξτε κατηγορία' b=Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: band_singers(conn,window,combo.get())) Label(window,bg='white', text=label, fg="blue", font=('arial','13')).pack() combo=ttk.Combobox(window,values=ep,font=('arial','13'),width=25) combo.pack() combo.current(0) b.pack() window.mainloop() return
def choose( a, conn ): # επιλογή πίνακα(για εισαγωγή, διαγραφή και αλλαγή στοιχειων) ή επιλογή άλμπουμ μεσα από combobox(για τα υπόλοιπα) if (a < 6): ep = [ 'Άλμπουμ', 'Ανήκει', 'Μουσικό Είδος', 'Επικ. Γραφίστα', 'Επικ. Μάνατζερ', 'Επικ. Οργανοπαίκτη', 'Επικ. Πελάτη', 'Επικ. Στούντιο', 'Επικ. Συμβεβλημένου', 'Ερμηνείες', 'Φυσική Διανομή', 'Γράφει', 'Ψηφιακή Διανομή', 'Γραφίστες', 'Μάνατζερ', 'Μουσικοί', 'Οργανοπαίκτες', 'Πελάτες', 'Περσόνες/γκρουπ', 'Πωλήσεις', 'Στιχουργοί', 'Στούντιο', 'Συμβεβλημένοι', 'Συμβόλαια', 'Συμμετέχει', 'Συνθέτει', 'Συνθέτες', 'Τραγούδια', 'Υπάγεται' ] label = "Επιλέξτε πίνακα" titlos = 'Επιλογή Πίνακα' else: titlos = 'Επιλογή Άλμπουμ' label = 'Επιλέξτε Άλμπουμ' cur = conn.cursor() cur.execute('''SELECT titlos FROM album''') titloi = cur.fetchall() if (a == 6): ep = ['**Όλα τα Άλμπουμ**'] else: ep = [] for i in range(len(titloi)): ep.append(titloi[i][0]) cur.close() window = scrollbar.create('350x250', titlos) tkinter.Label(window, bg='white', text=label, fg="blue", font=('times new roman', '14')).pack() combo = ttk.Combobox(window, values=ep, font=('times new roman', '14')) combo.pack() combo.current(0) tkinter.Button( window, bg='white', text="Επιλογή", font=('times new roman', '12'), command=lambda: save_choice(a, conn, window, combo.get())).pack() window.mainloop() return
def cd_or_vinyl( conn): #δημιουργία παραθύρου, για την επιλογή μεταξύ CD και VINYL window = scrollbar.create('350x250', 'Επιλογή Είδους') Label(window, text="Επιλέξτε είδος", fg="blue", bg='white', font=('arial', '13')).pack() combo = ttk.Combobox(window, values=['CD', 'VINYL'], font=('arial', '13')) combo.pack() combo.current(0) Button(window, text="Επιλογή", bg='white', font=('arial', '12'), command=lambda: physical_sales(conn, window, combo.get())).pack() window.mainloop()
def choose_song(conn,ch): #επιλογή τραγουδιού cur=conn.cursor() cur.execute('''SELECT tragoudi.titlos FROM `tragoudi` JOIN anhkei ON tragoudi.song_id=anhkei.song_id WHERE anhkei.album_id in (SELECT album.album_id FROM album WHERE album.titlos='{}')'''.format(ch)) option_tuple=cur.fetchall() options=[] for i in range(len(option_tuple)): options.append(option_tuple[i][0]) cur.close() window=scrollbar.create('350x250',"Επιλογή Τραγουδιού") if(options!=[]): #αν υπαρχουν τραγούδια στο άλμπουμ Label(window,bg='white', text='Επιλέξτε Τραγούδι', fg="blue", font=('arial','11')).pack() combo=ttk.Combobox(window,values=options,font=('arial','11'),width=25) combo.pack() combo.current(0) Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: instruments(conn,combo.get(),window)).pack() else: #αν δεν υπάρχουν Label(window,bg='white', text='Δεν υπάρχουν τιμές!', fg="red", font=('arial','14')).pack() window.mainloop() return
def delete_row(table, conn, combobox_array, window): ##ΔΙΑΓΡΑΦΗ ΠΛΕΙΑΔΑΣ entry=[] #Αποθήκευση της επιλογής πλειάδας for i in combobox_array: entry.append(i.get()) primary=helping_func.get_primary(table,conn) #Εύρεση του/των γνωρισμάτος/των που αποτελούν το πρωτεύον κλειδί cur=conn.cursor() sql2='''SELECT * FROM {} WHERE {}="{}"'''.format(table,primary[0],entry[0]) sql1='''DELETE FROM {} WHERE {}="{}"'''.format(table,primary[0],entry[0]) for i in range(1,len(primary)): sql1=sql1+' AND {}="{}"'.format(primary[i],entry[i]) sql2=sql2+' AND {}="{}"'.format(primary[i],entry[i]) sql1=sql1+';' sql2=sql2+';' #ελέγχουμε μήπως δεν υπάρχει η πλειάδα που μας δόθηκε cur.execute(sql2) if(cur.fetchall() is None): helping_func.error("Δεν βρέθηκε!") else: #Καταστροφή του προηγούμενου παραθύρου και δημιουργία του παραθύρου προειδοποίησης cur.close() window.destroy() alert_window=scrollbar.create('450x250','ALERT') i=Image.open("alert.JPG") img=ImageTk.PhotoImage(i) Label(alert_window,bg='white',image=img).grid(column=0,row=0,sticky=NW,columnspan=2) Label(alert_window,bg='white', text="Είστε σίγουροι για την διαγραφή;\nΔεν θα μπορεί να γίνει αναίρεση!", fg="red", font=('arial','14')).grid(column=2,row=0,columnspan=2) Button(alert_window,bg='white', text="ΔΙΑΓΡΑΦΗ", relief='flat',font=('arial','14'),command= lambda: delete_btn(conn,alert_window,sql1,table,entry)).grid(column=2,row=1,columnspan=2) Button(alert_window,bg='white', text="ΑΚΥΡΩΣΗ", relief='flat', font=('arial','14'),command= lambda: alert_window.destroy()).grid(column=2,row=2,columnspan=2) alert_window.mainloop() return
def columns_to_update(table,conn,combobox_array,window,col): #επιλογή στηλών προς ενημέρωση entry=[] #αποθήκευση επιλεγμένης πλειάδας for i in combobox_array: entry.append(i.get()) window.destroy() #καταστροφή παραθύρου επιλογής πλειάδας cur=conn.cursor() #δημιουργία παραθύρου επιλογής στηλών προς ενημέρωση check=scrollbar.create('340x350','Επιλογή στοιχείων για ενημέρωση') Label(check,bg='white', text='Επιλέξτε ποιές τιμές θέλετε να ενημερώσετε', fg="blue", font=('arial','13')).pack() #δημιουργία των "Checkbutton", ένα για κάθε στήλη που δεν είναι PRIMARY KEY ch_arr=[] for i in col: ch=IntVar() c=Checkbutton(check,bg='white',text=f'{helping_func.greek(i)}',variable=ch,font=('arial','13')) c.pack() ch_arr.append(ch) #κουμπί για αποθήκευση επιλογής που παραπέμπει στην "new_data" Button(check,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: new_data(3,conn,table,entry,col,check,ch_arr)).pack() return
def select_row_window(a,conn,table): # παράθυρο για επιλογή γνωρισμάτων πλειάδας (για διαγραφή, ενημέρωση ή εκτύπωση πλειάδας) if(a!=5): #στην διαγραφή και στην ενημέρωση,η επιλογή γίνεται βάσει του primary key fields=helping_func.get_primary(table,conn) else: #στην εκτύπωση πλειάδας,η επιλογή γίνεται βάσει οποιουδήποτε γνωρίσματος fields=[] cur=conn.cursor() cur.execute(f''' SELECT COLUMN_NAME FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='recordcompany2' AND `TABLE_NAME`="{table}"''') c=cur.fetchall() for i in range(len(c)): fields.append(str(c[i][0])) cur.close() #δημιουργία παραθύρου window=scrollbar.create('500x400','Επιλογή πλειάδας') #Εαν γίνεται ενημέρωση, γίνεται έλεγχος για το αν υπάρχουν στοιχεία που δεν ειναι PRIMARY KEY. Αν δεν υπάρχουν, η ενημέρωση ακυρώνεται col=[] if(a==3): cur=conn.cursor() cur.execute(''' SELECT COLUMN_NAME FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='recordcompany2' AND `TABLE_NAME`=%s AND `COLUMN_KEY`!="PRI"''',table) c=cur.fetchall() for i in range(len(c)): col.append(c[i][0]) cur.close() if(len(col)==0): Label(window,bg='white', text="Δεν μπορείτε να αλλάξετε αυτόν τον πίνακα.\nΔοκιμάστε διαγραφή και εισαγωγή εκ νέου.", fg="red", font=('arial','14')).grid(column=0,row=0,sticky=N) return Label(window,bg='white', text='Επιλέξτε πλειάδα', fg="blue", font=('arial','13')).grid(column=1,row=0,sticky=N) #Για καθε στήλη που ειναι primary key, δημιουργείται Combobox με επιλογές τα αποθηκευμένα στοιχεία της στήλης. #Για την επιλογή "Εκτύπωση πλειάδας" γίνεται για όλες τις στήλες i=1 combobox_array=[] for k in fields: #εμφάνιση ονόματος στήλης Label(window,bg='white', text=f'{helping_func.greek(k)}:', fg="blue", font=('arial','13')).grid(column=0,row=i,sticky=W,padx=10) cur=conn.cursor() cur.execute(f'''SELECT DISTINCT {k} FROM {table}''') option_tuple=cur.fetchone() op=[] #αν είναι η επιλογή "εκτύπωση πλειάδας", βαζουμε και την επιλογή '-', ώστε να επιλέγει αυτό ο χρήστης, αμα δεν θέλει να αναζητήσει πλειάδα βάσει αυτού του γνωρίσματος if(a==5): op.append('-') elif(option_tuple is None): #αλλιώς αν δεν υπάρχουν δεδομένα(σε στήλη που ειναι PRIMARY KEY),εμφανίζεται μήνυμα λάθους helping_func.error("Δεν υπάρχουν πλειάδες") return #δημιουργία επιλογών του Combobox while option_tuple is not None: op.append(str(option_tuple[0])) option_tuple=cur.fetchone() #δημιουργία Combobox combo=ttk.Combobox(window,values=op,font=('arial','13'),width=25) combo.grid(column=1,row=i,columnspan=2) combo.current(0) combobox_array.append(combo) i=i+1 cur.close() #δημιουργία κουμπίων if a==5: Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: show_row(table,conn,combobox_array,fields,window)).grid(column=1,row=i,sticky=S) elif a==2: Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: delete_row(table,conn,combobox_array,window)).grid(column=1,row=i,sticky=S) else: Button(window,bg='white',text="Επιλογή",font=('arial','12'),command=lambda: columns_to_update(table,conn,combobox_array,window,col)).grid(column=1,row=i,sticky=S) window.mainloop() return
def new_data(option,conn,table,entry,columns,check='',ch_arr=''): #επιλογή καινούριων δεδομένων #για ενημέρωση if(option==3): #δημιουργια αντίγραφου των αρχικών ονομάτων των στηλών columns_original=[] for item in columns:columns_original.append(item) #αφαίρεση απο το "columns" όσων στηλών δεν επιλέχθηκαν for i in range(len(ch_arr)): if(ch_arr[i].get()!=1): columns.remove(columns_original[i]) #εάν δεν επιλέχθηκαν στήλες, εμφάνιση μηνύματος λάθους και ακύρωση της ενημέρωσης if(len(columns)==0): helping_func.error('Δεν επιλέξατε στοιχεία προς τροποποίηση!') return else: #αλλιώς, καταστροφή προηγούμενου παραθύρου check.destroy() #για εισαγωγή if(option==1): #δημιουργία λίστας με τις στήλες columns=[] cur=conn.cursor() cur.execute('''SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='recordcompany2' AND `TABLE_NAME`=%s;''',table) row=cur.fetchall() for i in range(len(row)): columns.append(row[i][0]) cur.close() nv=[] entries=[] new_val=scrollbar.create('500x300','Νέες τιμές') #δημιουργία νέου παραθύρου #Εντοπισμός Foreign key cur=conn.cursor() cur.execute(f'''SELECT COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = 'recordcompany2' AND TABLE_NAME = "{table}";''') fk_tuple=cur.fetchone() fk_arr=[] fk_col_arr=[] while fk_tuple is not None: temp=[] fk_col_arr.append(str(fk_tuple[0])) for i in range(1,3): temp.append(str(fk_tuple[i])) fk_arr.append(temp) fk_tuple=cur.fetchone() cur.close() #δημιουργία του ανάλογου κουτιού εισαγωγής για κάθε στοιχείο της λίστας "columns" for i in range(len(columns)): Label(new_val,bg='white', text=f'{helping_func.greek(columns[i])}:', font=('arial','13')).grid(column=0,row=i,columnspan=2) if(columns[i] in fk_col_arr): # Για τις στήλες που είναι foreign key cur=conn.cursor() index=-1 for c in range(len(fk_col_arr)): if(columns[i]==fk_col_arr[c]): index=c cur.execute(f'''SELECT DISTINCT {fk_arr[index][1]} FROM {fk_arr[index][0]}''') option_tuple=cur.fetchone() if(option==1): op=['-'] else: op=[] if(option_tuple is None and option==3): #αν δεν ύπαρχουν δεδομένα (στην στήλη που δείχνει το foreign key),εμφανίζεται μήνυμα λάθους helping_func.error("Δεν υπάρχουν δεδομένα\nγια να αντιστοιχίσετε\nτο foreign key!") return #δημιουργία επιλογών του Combobox while option_tuple is not None: op.append(str(option_tuple[0])) option_tuple=cur.fetchone() #δημιουργία Combobox combo=[] combo.append(ttk.Combobox(new_val,values=op,font=('arial','13'),width=16)) combo[0].grid(column=2,row=i,columnspan=2) combo[0].current(0) entries.append(combo) cur.close() elif(columns[i]=='order_date'): #για δεδομένα datetime entries.append(helping_func.datetime_data(i,new_val)) elif('date' in columns[i] or 'rec' in columns[i]):#για δεδομένα date entries.append(helping_func.date_data(i,new_val)) elif(columns[i]=='diarkeia'):#για δεδομένα time entries.append(helping_func.time_data(i,new_val)) else:#για όλα τα άλλα δεδομένα temp1=[] temp1.append(Entry(new_val,font=('times new roman','12'), bg='white', relief='sunken', bd=2)) entries.append(temp1) entries[i][0].grid(column=2,row=i,columnspan=2) #δημιουργία κουμπιών για αποθήκευση if(option==3): Button(new_val,bg='white',text="Αποθήκευση",font=('arial','12'),command=lambda: update_exe(conn,table,entry,entries,columns,new_val)).grid(column=1,row=i+1,columnspan=2) else: Button(new_val,bg='white',text="Αποθήκευση",font=('arial','12'),command=lambda: insert_row(table,conn,entries,new_val,columns)).grid(column=1,row=i+1,columnspan=2) new_val.mainloop() return
def homescreen(conn): #δημιουργία αρχικής οθόνης main = scrollbar.create("700x550", 'Αρχική', 1) #δημιουργία μενού menubar = tkinter.Menu(main) edit = tkinter.Menu(menubar, tearoff=0) edit.add_command(label='Εισαγωγή...', command=lambda: choose(1, conn)) edit.add_command(label='Διαγραφή...', command=lambda: choose(2, conn)) edit.add_command(label='Αλλαγή στοιχείων...', command=lambda: choose(3, conn)) edit.add_separator() edit.add_command(label="Έξοδος", command=main.destroy) menubar.add_cascade(label="Επεξεργασία", menu=edit) show = tkinter.Menu(menubar, tearoff=0) show.add_command(label='Εκτύπωση πίνακα...', command=lambda: choose(4, conn)) show.add_command(label='Εκτύπωση πλειάδας...', command=lambda: choose(5, conn)) menubar.add_cascade(label="Εκτύπωση", menu=show) main.config(menu=menubar) i = Image.open("logo.PNG") img = ImageTk.PhotoImage(i) tkinter.Label(main, bg='white', image=img).pack() #δημιουργία κουμπιών btn1 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Φυσικές πωλήσεις", font=('helvetica', '14'), command=lambda: sales.cd_or_vinyl(conn)) btn2 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Έσοδα ανά άλμπουμ", font=('helvetica', '14'), command=lambda: sales.profit_per_album(conn)) btn3 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Στοιχεία τραγουδιών ανά άλμπουμ", font=('helvetica', '14'), command=lambda: choose(6, conn)) btn4 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Συγκροτήματα/Τραγουδιστές", font=('helvetica', '14'), command=lambda: musicians.choice(2, conn)) btn5 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Στοιχεία συμβολαίων ανά κατηγορία καλλιτεχνών", font=('helvetica', '14'), command=lambda: musicians.choice(1, conn)) btn6 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Οργανοπαίκτες που συμμετείχαν σε ένα τραγούδι", font=('helvetica', '14'), command=lambda: choose(7, conn)) btn7 = HoverBtn( main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Πελάτες και ποσότητες των προϊόντων που προμηθεύτηκαν", font=('helvetica', '14'), command=lambda: partners.pelates(conn)) btn8 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Γραφίστες και τα άλμπουμ που έχουν επιμεληθεί", font=('helvetica', '14'), command=lambda: partners.grafistas(conn)) btn9 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Άλμπουμ ανά μουσικό είδος", font=('helvetica', '14'), command=lambda: album_info.album_per_genre(conn)) btn10 = HoverBtn(main, bg='white', width=500, activebackground='light cyan', relief='flat', text="Άλμπουμ ανά studio ηχογράφησης", font=('helvetica', '14'), command=lambda: partners.album_per_studio(conn)) btn1.pack() btn2.pack() btn3.pack() btn4.pack() btn5.pack() btn6.pack() btn7.pack() btn8.pack() btn9.pack() btn10.pack() main.mainloop()
if (errors != 0): err.destroy() err = tkinter.Label( parent, bg='white', text="Λάθος όνομα χρήστη ή κωδικός. \nΑποτυχία σύνδεσης.", fg="red", font=('arial', '11')) err.pack() errors = 2 return #δημιουργία παραθύρου για την εισαγωγή όνομα χρήστη και κωδικού global errors errors = 0 parent = scrollbar.create("350x170", 'Σύνδεση', 1) name = tkinter.Label(parent, text="Userame", font=('times new roman', '12'), bg='white').pack() e1 = tkinter.Entry(parent, font=('times new roman', '11'), bg='white', relief='sunken', bd=2) e1.pack() password = tkinter.Label(parent, text="Password", font=('times new roman', '12'), bg='white').pack()