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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| #Cette classe hérite de tkinter.Frame (objet graphique)
class ctrlEditMatrice(Frame):
"Controleur graphique pour l'édition d'une matrice" # pour la documentation
def __init__(self, parent,matr):
Frame.__init__(self,parent) #appel du constructeur de la classe parente
self.parent = parent # on conserve en attribut la fenêtre parente qui contient le controleur
self.matr = matr # on met en attribut la matrice à éditer
self._initialize() # on appelle la méthode d'initialisation du widget
def _initialize(self):
"méthode privée appelée par le constructeur pour charger et remplir les éléments graphiques" # commentaire de documentation
#crée et positionne les widget de la colonne 0 qui servent au choix du nombre de lignes/colonnes
self.var_Nbr_Lignes = IntVar()
self.var_Nbr_Lignes.set(self.matr.lignes)
self.label_NbreLignes = Label(self, text="Nombre de lignes:")
self.label_NbreLignes.grid(column=0, row=0, sticky='NSEW')
self.entry_NbreLignes = Entry(self, textvariable="3")
self.entry_NbreLignes.grid(column=0, row=1, sticky='NSEW') # positionne le champ dans la grille
self.var_Nbr_Colonnes = IntVar()
self.var_Nbr_Colonnes.set(self.matr.colonnes)
self.label_NbreColonnes = Label(self, text="Nombre de colonnes:")
self.label_NbreColonnes.grid(column=0, row=2, sticky='NSEW')
self.entry_NbreColonnes = Entry(self, textvariable="4")
self.entry_NbreColonnes.grid(column=0, row=3, sticky='NSEW') # positionne le champ dans la grille
self.btn_Val_L_C = Button(self, text= "Valider", command= self._update_Matr_LC)
self.btn_Val_L_C.grid(column=0,row=6, sticky='NSEW')
#affiche le nom des lignes/colonnes de la matrice
for i in range (self.var_Nbr_Lignes.get()):
self.btn_S_M = Button(self, text=("S"+str(i+1)))
self.btn_S_M.grid(column=2, row=(i+1), sticky='NSEW')
for i in range (self.var_Nbr_Colonnes.get()):
self.btn_R_M = Button(self, text=("R"+str(i+1)))
self.btn_R_M.grid(column=(i+4), row=0, sticky='NSEW')
#Creation des entre de saisie de values de la matrice
liste_entry = []
rows = []
for i in range(self.var_Nbr_Lignes.get()):
cols = []
for j in range(self.var_Nbr_Colonnes.get()):
self.var_Value_Matrice = IntVar()
self.var_Value_Matrice.set(self.matr.tableau[i][j])
self.entry_Matrice = Entry(self, justify='center', cursor='pencil')
self.entry_Matrice.insert(END, '(%d , %d)' % ((i), (j)))
liste_entry.append(self.entry_Matrice)
cols.append(self.entry_Matrice)
self.entry_Matrice.grid(column=(j+4), row=(i+1), sticky='NSEW')
rows.append(cols)
self.btn_Val_Mat = Button(self, text= "Valider tout", command= self._updateMatrModelAll)
self.btn_Val_Mat.grid(column=((self.var_Nbr_Colonnes.get())+3), row=6, sticky='NSEW')
#crée et positionne le bouton qui efface toutes les values des entry de la matrice
self.btn_Erase_All = Button(self, text= "Effacer tout", command=self.delete_all_entries(liste_entry))
self.btn_Erase_All.grid(column=2,row=0, sticky='NSEW')
#self.pack()
"""# methode de mise à jour du nom dans le modèle après modif sur l'interface
def _updateMatrModelLC(self):
self.matr.lignes= int_nb_l
self.matr.colonnes= int_nb_c"""
# methode de mise à jour des valeurs de la matrice après modif sur l'interface
def _updateMatrModelAll(self):
self.matr.lignes= int(self.var_Nbr_Lignes.get())
self.matr.colonnes= int(self.var_Nbr_Colonnes.get())
for i in range (self.matr.lignes):
for j in range (self.matr.colonnes):
self.matr.tableau[i][j] = int(self.entry_Matrice.get())
print("Entrée "+str(i)+" , "+str(j)+" Sauvegardée, valeur: " + str(self.matr.tableau[i][j]))
def _update_Matr_LC(self):
self.matr.lignes = int(self.var_Nbr_Lignes.get())
self.matr.colonnes = int(self.var_Nbr_Colonnes.get())
print ("Entrée Sauvegardée lignes: "+str(self.matr.lignes)+" colonnes: "+ str(self.matr.colonnes))
def delete_all_entries(self, lst):
for entry in enumerate(lst):
self.entry_Matrice.delete(0, END) # clear |
Partager